情况:
我有一列从十六进制解码为varchar,其值如下所示:
{"something":"example"}
目标:
我想提取引号之间的第二个单词。
我尝试过的事情:
我从几个substring
和charindex
函数开始,但是我的代码看起来比应该的复杂。
SELECT SUBSTRING(
SUBSTRING(
'{"something":"example"}',
charindex(':"','{"something":"example"}')+2,
LEN('{"something":"example"}')-charindex(':"','{"something":"example"}')+2),
0,
CHARINDEX('"',SUBSTRING(
'{"something":"example"}',
charindex(':"','{"something":"example"}')+2,
LEN('{"something":"example"}')-charindex(':"','{"something":"example"}')+2))
)
有什么想法吗?
答案 0 :(得分:5)
如果您使用的是SQL Server 2016+,则可以使用OPENJSON
:
SELECT [value]
FROM OPENJSON('{"something":"example"}');
所以对一个表:
SELECT [value]
FROM (VALUES('{"something":"example"}'),
('{"another":"sample"}'))V(S)
CROSS APPLY OPENJSON(V.S);
这将返回:
value
-------
example
sample