如何提取两个字符之间的字符串

时间:2019-05-01 15:42:08

标签: sql sql-server

情况:

我有一列从十六进制解码为varchar,其值如下所示:

{"something":"example"}

目标:

我想提取引号之间的第二个单词。

我尝试过的事情:

我从几个substringcharindex函数开始,但是我的代码看起来比应该的复杂。

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))
                )

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

如果您使用的是SQL Server 2016+,则可以使用OPENJSON

SELECT [value]
FROM OPENJSON('{"something":"example"}');

db<>fiddle

所以对一个表:

SELECT [value]
FROM (VALUES('{"something":"example"}'),
            ('{"another":"sample"}'))V(S)
     CROSS APPLY OPENJSON(V.S);

这将返回:

value
-------
example
sample