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

SQL按字符位置拆分Name字段:提取姓、名与中间名首字母

拆分Name字段为FirstName、LastName和MI的SQL方案

针对你现有查询的不足,下面是修改后的SQL代码,能够处理带中间名首字母(含/不含句点)、完整中间名、无中间名以及团体名称的多种格式:

SELECT 
    Name,
    -- 提取姓氏(LastName)
    CASE 
        WHEN Name LIKE '%,%' THEN LEFT(Name, CHARINDEX(',', Name) - 1) 
        ELSE Name 
    END AS LastName,
    -- 提取名字(FirstName):仅截取到逗号后第一个空格前的部分
    CASE 
        WHEN Name LIKE '%,%' THEN 
            CASE 
                -- 存在空格时,截取到第一个空格前
                WHEN CHARINDEX(' ', Name, CHARINDEX(',', Name) + 2) > 0 
                THEN SUBSTRING(Name, CHARINDEX(',', Name) + 2, CHARINDEX(' ', Name, CHARINDEX(',', Name) + 2) - (CHARINDEX(',', Name) + 2))
                -- 无空格时,直接取逗号后全部内容
                ELSE SUBSTRING(Name, CHARINDEX(',', Name) + 2, LEN(Name))
            END
        ELSE Name 
    END AS FirstName,
    -- 提取中间名首字母(MI):去除句点,无中间名则返回NULL
    CASE 
        WHEN Name LIKE '%,%' AND CHARINDEX(' ', Name, CHARINDEX(',', Name) + 2) > 0 
        THEN REPLACE(LEFT(SUBSTRING(Name, CHARINDEX(' ', Name, CHARINDEX(',', Name) + 2) + 1, LEN(Name)), 1), '.', '')
        ELSE NULL 
    END AS MI
FROM Customer

逻辑说明

  • LastName:如果Name包含逗号,直接取逗号前的内容作为姓氏;无逗号则保留原字段(对应团体名称或名在前的个人)。
  • FirstName:针对带逗号的格式,先定位逗号后的第一个空格:
    • 有空格时,截取逗号后到该空格前的内容作为名字;
    • 无空格时,说明没有中间名,直接取逗号后全部内容作为名字。
  • MI:仅当存在中间名部分(即逗号后有空格)时,提取空格后内容的首字母,并自动去除可能的句点;无中间名时返回NULL。

测试示例

NameLastNameFirstNameMI
Doe, John A.DoeJohnA
Smith, BobSmithBobNULL
Wilson, Alice MarieWilsonAliceM
XYZ CorporationXYZ CorporationXYZ CorporationNULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:15:36