我在使用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中的"
。但这很容易…