首页 > 解决方案 > 如何提取两个字符之间的字符串

问题描述

情况:

我有一个从 Hex 解码为 varchar 的列,其中值如下所示:

{"something":"example"}

客观的:

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

我尝试了什么:

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

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

有任何想法吗?

标签: sqlsql-server

解决方案


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

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

db<>小提琴

所以对着一张桌子:

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

这将返回:

value
-------
example
sample

推荐阅读