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

求助:SQL Server中按空格拆分含多空格姓名的通用SQL查询方案

解决方案:SQL Server按连续3-4个空格拆分姓名

核心思路

利用PATINDEX定位连续3-4个空格的分界位置,结合字符串截取函数实现精准拆分,同时清理首尾无关空格保证结果整洁。

实现代码

假设你的表名为YourTable,姓名字段为FullName,执行以下查询:

SELECT
    -- 提取LastName:分界符前的部分
    LTRIM(RTRIM(SUBSTRING(FullName, 1, PATINDEX('%   %', cleaned_name) - 1))) AS LastName,
    -- 提取FirstName:分界符后的部分(去除前导空格)
    LTRIM(SUBSTRING(cleaned_name, PATINDEX('%   %', cleaned_name), LEN(cleaned_name))) AS FirstName
FROM (
    -- 先清理字段首尾空格,避免干扰匹配
    SELECT LTRIM(RTRIM(FullName)) AS cleaned_name
    FROM YourTable
) AS temp;

代码说明

  1. 预处理清理:子查询中用LTRIM(RTRIM)去除姓名首尾的多余空格,确保只关注中间的分隔空格。
  2. 定位分界符:PATINDEX('% %', cleaned_name)会找到第一个连续3个或更多空格的起始位置,这就是LastName和FirstName的分界点。
  3. 截取字段:
    • LastName取从字符串开头到分界符前的内容,再次清理空格保证格式统一。
    • FirstName从分界符位置开始截取,用LTRIM去掉开头的连续空格,得到干净的FirstName。

测试验证

针对你提供的测试数据:

Full Name
A B C
A B C D

执行查询后输出:

LastNameFirstName
AB C
A BC D

完全符合预期结果。

精准匹配优化(可选)

如果需要严格限制分隔符为3或4个连续空格(排除5个及以上的情况),可以调整PATINDEX的匹配模式,结合二进制排序规则确保精准匹配:

SELECT
    LTRIM(RTRIM(SUBSTRING(FullName, 1, PATINDEX('%[ ]{3,4}%', cleaned_name COLLATE Latin1_General_BIN) - 1))) AS LastName,
    LTRIM(SUBSTRING(cleaned_name, PATINDEX('%[ ]{3,4}%', cleaned_name COLLATE Latin1_General_BIN), LEN(cleaned_name))) AS FirstName
FROM (
    SELECT LTRIM(RTRIM(FullName)) AS cleaned_name
    FROM YourTable
) AS temp;

内容的提问来源于stack exchange,提问作者user3204086

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:05:58