如何在SQL Server中提取字符串内的大写字母及间隔下划线
SQL Server 字符串提取实现方案
核心逻辑:先定位字符串中第一个小写英文字母的起始位置,再截取从字符串开头到该位置前1位的内容即可,完全匹配你要求的提取规则。
用到的核心函数
PATINDEX('%[a-z]%', 目标字符串):匹配第一个小写英文字母的索引位置(SQL Server字符串索引默认从1开始)LEFT(目标字符串, 截取长度):从字符串左侧截取指定长度的内容
通用查询代码
SELECT LEFT( 你的字段名, PATINDEX('%[a-z]%', 你的字段名 + 'a') - 1 ) AS 提取结果 FROM 你的表名
代码中给目标字符串末尾拼接
'a'是为了兼容目标字符串完全没有小写字母的场景,避免PATINDEX返回0导致截取长度为负报错。
排序规则兼容处理
如果你的数据库使用大小写不敏感的排序规则,需要强制指定大小写敏感的排序规则保证小写字母匹配正确,修改写法如下:
SELECT LEFT( 你的字段名, PATINDEX('%[a-z]%', 你的字段名 COLLATE SQL_Latin1_General_CP1_CS_AS + 'a') - 1 ) AS 提取结果 FROM 你的表名
效果验证
示例1:输入字符串
ABC_DEF_ghi
PATINDEX匹配到第一个小写字母g的位置是8,截取前7位,结果为ABC_DEF,符合预期
示例2:输入字符串ABC_DEF_GHI_jkl
PATINDEX匹配到第一个小写字母j的位置是12,截取前11位,结果为ABC_DEF_GHI,符合预期
自定义函数复用方案
如果需要频繁调用该提取逻辑,可以封装为自定义标量函数:
CREATE FUNCTION dbo.ExtractUpperUnderscoreSegment (@inputStr NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) AS BEGIN RETURN LEFT( @inputStr, PATINDEX('%[a-z]%', @inputStr COLLATE SQL_Latin1_General_CP1_CS_AS + 'a') - 1 ) END
调用方式:
SELECT dbo.ExtractUpperUnderscoreSegment(你的字段名) AS 提取结果 FROM 你的表名
内容的提问来源于stack exchange,提问作者uday kiran
相关产品推荐
相关产品推荐

