Есть ли простой способ сделать это?
Нет, не совсем.
Вы можете найти позиции s:
и d:
, а затем использовать их для извлечения числа между ними, увеличить его на единицу и вернуть обратно туда, где он принадлежит.
declare @T table
(
ID int,
Value varchar(50)
);
insert into @T values
(504, 's:0;d:n;e:test;'),
(506, 's:1;d:y;e:branch;'),
(507, 's:2;d:y;e:;');
select T.ID,
stuff(T.Value, P.S, P.D - P.S - 1, S.Value) as NewValue
from @T as T
cross apply (values(charindex('s:', T.Value) + 2,
charindex('d:', T.Value))) as P(S, D)
cross apply (values(substring(T.Value, P.S, P.D - P.S - 1) + 1)) as S(Value)
версия, где вы найдете ;
после s:
вместо d:
как предложил Эрику в комментарии.
select T.ID,
stuff(T.Value, S.Pos, SEnd.Pos - S.Pos, V.NewValue) as NewValue
from @T as T
cross apply (values(charindex('s:', T.Value) + 2)) as S(Pos)
cross apply (values(charindex(';', T.Value, S.Pos))) as SEnd(Pos)
cross apply (values(substring(T.Value, S.Pos, SEnd.Pos - S.Pos) + 1)) as V(NewValue)
означает число всегда предстают перед d и ы – TheGameiswar
Числа всегда одна цифра? – Buddi