SQL Server 2014中如何提取字符串第一个数字右侧的全部内容?
SQL Server 2014 提取首个数字串后内容解决方案
错误原因分析
你原有的查询语句无法得到预期结果,是因为 CHARINDEX 函数不支持通配符匹配,你传入的'[0-9]%'会被当做普通字面量做精确匹配,无法匹配到字符串中的数字,返回值为0,最终截取逻辑完全不符合要求。
正确实现方案
我们可以使用支持通配符匹配的PATINDEX函数实现需求,逻辑为:
- 定位到字符串中第一个数字的起始位置
- 从该位置向后查找第一个非数字字符的位置
- 从第一个非数字字符的位置开始截取剩余字符串,去除左侧空格即可得到结果
测试示例代码
SELECT LTRIM( SUBSTRING( 'ABC 123 DEF XYZ', PATINDEX('%[^0-9]%', SUBSTRING('ABC 123 DEF XYZ', PATINDEX('%[0-9]%', 'ABC 123 DEF XYZ'), LEN('ABC 123 DEF XYZ'))) + PATINDEX('%[0-9]%', 'ABC 123 DEF XYZ') - 1, LEN('ABC 123 DEF XYZ') ) ) AS result
执行上述代码,输出结果为:DEF XYZ,符合预期。
表字段查询适配
如果需要处理表中的字段数据,假设字段名为content,表名为your_table,可以使用如下语句:
SELECT -- 无数字的情况可自定义返回值,此处返回空字符串 CASE WHEN PATINDEX('%[0-9]%', content) = 0 THEN '' ELSE LTRIM( SUBSTRING( content, PATINDEX('%[^0-9]%', SUBSTRING(content, PATINDEX('%[0-9]%', content), LEN(content))) + PATINDEX('%[0-9]%', content) - 1, LEN(content) ) ) END AS result FROM your_table
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

