Вы можете выбрать строку из ЗНАЧЕНИЙ.
Таким образом, вы можете повторить значение без двойного его жесткого кодирования.
Тогда получите правильную часть с номером от этого.
F.e. используя RIGHT, CHARINDEX, REVERSE и VALUES:
select right(val, charindex('/',reverse(val))-1) as nr
from (values ('xyzdf/1234')) q(val);
Или используйте SUBSTRING, CHARINDEX, LEN и VALUES:
select substring(val,charindex('/',val)+1,len(val)) as nr
from (values ('xyzdf/1234')) q(val);
Или злоупотреблять PARSENAME :
select parsename(replace('xyzdf/1234','/','.'),1) as nr;
Или использовать переменные:
declare @value varchar(30) = 'xyzdf/1234';
declare @nr int = right(@value, charindex('/',reverse(@value))-1);
select @nr as nr;
Но если намерение состоит в том, чтобы обновить столбец, чтобы оставалось только число?
Тогда использование метода SUBSTRING, вероятно, остается самым безопасным.
Потому что он оставит тех без /
нетронутыми и без сбоев при ошибке Invalid length parameter passed
.
Пример:
declare @Table table (id int identity(1,1) primary key, col1 varchar(30));
insert into @Table (col1) values
('xyzdf/1234'),
('12345');
update @Table
set col1 = substring(col1,charindex('/',col1)+1,len(col1))
where col1 like '%/[0-9]%';
select * from @Table;