如何从SQL的varchar类型字符串中提取以数字开头的词语
从字符串中提取以数字开头词语的SQL实现方案
需求描述
从varchar类型存储的句子中,提取任意位置出现的以数字开头的词语。
示例测试数据
-- DDL and sample data population, start DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, tokens VARCHAR(100)); INSERT INTO @tbl (tokens) VALUES ('abc 1XXXX xyz'), ('abc xyz 2XXXXXXXX'), ('3XX abc xyz'); -- DDL and sample data population, end
预期输出
+----+-----------+ | ID | Result | +----+-----------+ | 1 | 1XXXX | | 2 | 2XXXXXXXX | | 3 | 3XX | +----+-----------+
实现SQL(适用SQL Server 2016及以上版本)
核心思路是先按空格拆分字符串为单个词语,再筛选首字符为数字的结果:
SELECT t.ID, s.value AS Result FROM @tbl t CROSS APPLY STRING_SPLIT(t.tokens, ' ') s WHERE LEFT(s.value, 1) LIKE '[0-9]'
兼容低版本SQL Server的实现方案
如果使用的SQL Server版本不支持STRING_SPLIT函数,可以用XML拆分方式实现:
SELECT t.ID, Split.a.value('.', 'VARCHAR(100)') AS Result FROM ( SELECT ID, CAST('<X>' + REPLACE(tokens, ' ', '</X><X>') + '</X>' AS XML) AS split_xml FROM @tbl ) AS t CROSS APPLY split_xml.nodes ('/X') AS Split(a) WHERE LEFT(Split.a.value('.', 'VARCHAR(100)'), 1) LIKE '[0-9]'
内容的提问来源于stack exchange,提问作者javaMan
相关产品推荐
相关产品推荐

