You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

代码解释

  1. PATINDEX匹配前缀:
    • ^[A-Za-z0-9]/[0-9]+[ ]+[0-9]+[ ]+:
      • ^:匹配行首
      • [A-Za-z0-9]/:匹配开头的字母/数字 + 斜杠
      • [0-9]+:匹配斜杠后的一串数字
      • [ ]+:匹配一个或多个空格
      • 重复[0-9]+[ ]+:匹配空格后的数字序列 + 末尾空格
  2. SUBSTRING提取姓名:通过PATINDEX获取前缀的起始位置,结合LEFT和LEN得到前缀的总长度,从前缀结束位置开始截取剩余内容。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:30:52