String 子字符串SQL选择

String 子字符串SQL选择,string,substring,sql-server-2014,String,Substring,Sql Server 2014,单个单元格将包含如下字符串: [{"Code":"C015","Index":0,"Message":"blah blah blah","FailSeverity":2},{"Code":"W012","Index":0,"Message":"blah blah blah","FailSeverity":1}] 我对从上面的单个字符串中提取所有代码感兴趣。也就是说,我想要上面例子中的“C015”和“W012”,而不是别的 我看过Substring()函数,但不太确定在这种情况下如何实现它,或者

单个单元格将包含如下字符串:

[{"Code":"C015","Index":0,"Message":"blah blah blah","FailSeverity":2},{"Code":"W012","Index":0,"Message":"blah blah blah","FailSeverity":1}]
我对从上面的单个字符串中提取所有代码感兴趣。也就是说,我想要上面例子中的“C015”和“W012”,而不是别的


我看过Substring()函数,但不太确定在这种情况下如何实现它,或者我是否完全理解它是一个函数。

对于类似的内容,我认为您应该使用一个好的基于计数的字符串拆分器函数。在本例中,我使用Jeff Moden的DelimitedSplit8K

DECLARE @String VARCHAR(8000) = '[{"Code":"C015","Index":0,"Message":"blah blah blah","FailSeverity":2},{"Code":"W012","Index":0,"Message":"blah blah blah","FailSeverity":1}]';

WITH 
    cte_GetCodes AS (
    SELECT 
        CodeValue = CASE WHEN LAG(dsk.Item, 2) OVER (ORDER BY dsk.ItemNumber) = 'Code' THEN dsk.Item END 
    FROM
        dbo.DelimitedSplit8K(@String, '"') dsk
    )
SELECT 
    *
FROM
    cte_GetCodes gc
WHERE 
    gc.CodeValue IS NOT NULL; 
结果

CodeValue
----------
C015
W012

你的数据库管理系统是什么?根据这一点,有不同的内置函数将其视为json而不是子字符串。我们使用的DBMS是SQL Server Management Studio 2014Management Studio不是DBMS!!它只是一个查询和模式工具,可以连接到许多不同版本和版本的Sql Server,甚至是一些非Sql Server数据库。至于这个问题,如果您可以更新到Sql Server 2016,就有原生JSON支持。但是一般来说,如果你想关心这些东西,你需要在你的模式中构建表和列来处理单个值,而不是大型的文本博客OK我误解了当时的问题,也许你可以澄清一下?关于更新,不幸的是,目前我们没有选择。我想我对我的要求有点不清楚。我正在搜索包含这些消息的单元格,因此我希望在一个查询中搜索它并删除所有额外数据,如果这有意义的话?@ChaseWhitehead SQL Server没有“单元格”,因此没有。。。仍然没有意义。如果你想说得通,首先用一些实际的测试数据更新你的帖子,并根据提供的测试数据显示你想要的确切结果。