Из других ответов видно, что SQL-Server 2016+ с широкой поддержкой JSON был бы очень полезен.Но без тебя не потерялись.Вы можете использовать строковые методы:
кредиты для Panagiotis Kanavos для MCVE
declare @table table (trigparams nvarchar(2000))
insert into @table
values
('{"OWLSObjKey":{"key":"OWLSObjKey","value":"189","type":null},"OWLSObjType":{"key":"OWLSObjType","value":"17","type":null},"ObjKey":{"key":"ObjKey","value":"189","type":null},"ObjType":{"key":"ObjType","value":"17","type":null}}'),
('{"OWLSObjKey":{"key":"OWLSObjKey","value":"190","type":null},"OWLSObjType":{"key":"OWLSObjType","value":"17","type":null},"ObjKey":{"key":"ObjKey","value":"190","type":null},"ObjType":{"key":"ObjType","value":"17","type":null}}')
- это запрос
select LEFT(CutOff,CHARINDEX('"',CutOff)-1)
from @table t
CROSS APPLY(SELECT STUFF(t.trigparams,1,CHARINDEX('"value":"',t.trigparams)+8,'')) A(CutOff);
Идея вкратце:
В APPLY
мы будем использовать STUFF()
для записи ничего поверх первых символов до числа, которое вы ищете (после первого вхождения "value":"
. Это возвращается как столбец CutOff . Теперь мы можем использовать LEFT()
, чтобы выбрать только номер.