从字符串中提取文本数据使用SQL(将null值)



我在使用T-SQL从字符串数据中提取文本时有问题。我有以下数据和文本,我想提取(第二和第三下划线之间的值:

sss_ss_d_a -> d
aaa_dd_b -> b
aaa_aa -> NULL

我知道有很多类似的主题,但我有问题,特别是在处理null和情况下,当没有分隔符后所需的值

非常感谢您的帮助,regards

试一下:

声明表中的一些示例数据

DECLARE @tbl TABLE(YourString VARCHAR(100));
INSERT INTO @tbl VALUES('sss_ss_d_a'),('aaa_dd_b'),('aaa_aa');

——查询

SELECT t.YourString
,CAST(CONCAT('<x>',REPLACE(t.YourString,'_','</x><x>'),'</x>') AS XML).value('/x[3]/text()[1]','nvarchar(max)')
FROM @tbl t;

简而言之:

  • 我们用XML标记替换下划线,从而将字符串转换为可浇注的XML。
  • 我们在.value中使用XQuery选择第三个元素。

从v2016开始,推荐使用JSON代替
(提示:我们使用"2"不是"3"因为JSON是从零开始的)。

,JSON_VALUE(CONCAT('["',REPLACE(t.YourString,'_','","'),'"]'),'$[2]')

思路大致相同。

一般提示:两种方法都可能需要转义禁止字符,例如XML中的<&或JSON中的"。但这很容易…