SQL Server正则匹配多空格:提取符合特定前缀规则的客户姓名
在SQL Server中提取符合前缀规则的客户姓名
问题分析
你需要匹配的行首规则是:任意字母/数字 + / + 数字序列 + 空格 + 数字序列 + 空格,原使用的[A-Z]/[0-9]%仅匹配了开头的字母/单数字,未覆盖后续的数字序列、空格等完整前缀结构,因此无法准确定位姓名的起始位置。
解决方案
利用SQL Server的PATINDEX函数匹配完整前缀,结合SUBSTRING和RTRIM提取并清理姓名部分:
核心SQL语句
-- 假设存储数据的表名为YourTable,目标字段名为YourColumnName SELECT RTRIM(SUBSTRING(YourColumnName, PATINDEX('^[A-Za-z0-9]/[0-9]+[ ]+[0-9]+[ ]+', YourColumnName) + LEN(LEFT(YourColumnName, PATINDEX('^[A-Za-z0-9]/[0-9]+[ ]+[0-9]+[ ]+', YourColumnName))), LEN(YourColumnName))) AS CustomerName FROM YourTable -- 仅筛选符合前缀规则的行 WHERE PATINDEX('^[A-Za-z0-9]/[0-9]+[ ]+[0-9]+[ ]+', YourColumnName) > 0;
代码解释
PATINDEX匹配前缀:^[A-Za-z0-9]/[0-9]+[ ]+[0-9]+[ ]+:^:匹配行首[A-Za-z0-9]/:匹配开头的字母/数字 + 斜杠[0-9]+:匹配斜杠后的一串数字[ ]+:匹配一个或多个空格- 重复
[0-9]+[ ]+:匹配空格后的数字序列 + 末尾空格
SUBSTRING提取姓名:通过PATINDEX获取前缀的起始位置,结合LEFT和LEN得到前缀的总长度,从前缀结束位置开始截取剩余内容。RTRIM清理空格:去除姓名末尾可能存在的多余空格。
测试示例
用你提供的测试字符串验证:
DECLARE @TestString VARCHAR(200) = 'K/31209536 9997530556 RICARDO JOSE DE OLIVEIRA QUEIROZ'; SELECT RTRIM(SUBSTRING(@TestString, PATINDEX('^[A-Za-z0-9]/[0-9]+[ ]+[0-9]+[ ]+', @TestString) + LEN(LEFT(@TestString, PATINDEX('^[A-Za-z0-9]/[0-9]+[ ]+[0-9]+[ ]+', @TestString))), LEN(@TestString))) AS CustomerName;
执行后将返回:RICARDO JOSE DE OLIVEIRA QUEIROZ
内容的提问来源于stack exchange,提问作者Jonathas Souza
相关产品推荐
相关产品推荐

