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

Rog*_*erg -1 sql sql-server

情况:

我有一列从十六进制解码为varchar,其中值看起来像这样:

{"something":"example"}
Run Code Online (Sandbox Code Playgroud)

目的:

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

我试过的

我从几个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))
                )
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Lar*_*rnu 5

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

SELECT [value]
FROM OPENJSON('{"something":"example"}');
Run Code Online (Sandbox Code Playgroud)

db <>小提琴

所以对一个表:

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

返回:

value
-------
example
sample
Run Code Online (Sandbox Code Playgroud)