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

如何使用SQL Server从客户全名提取带首字母的姓名?

SQL Server 提取带首字母的姓名格式查询

需求:从客户全名中提取「名字及中间名首字母 + 完整姓氏」的格式,示例如下:

  • 原全名:John Cena → 输出:J Cena
  • 原全名:Wathsala Malshani Perera → 输出:W M Perera

针对数据表的查询语句

假设你的客户表为Customers,存储全名的字段是FullName,可以使用以下查询生成目标格式的姓名:

WITH NameParts AS (
    SELECT 
        CustomerId,
        FullName,
        value AS NamePart,
        ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY (SELECT NULL)) AS PartIndex
    FROM Customers
    CROSS APPLY STRING_SPLIT(FullName, ' ')
    WHERE value <> '' -- 过滤拆分后可能出现的空字符串
)
SELECT 
    CustomerId,
    FullName,
    -- 拼接首字母部分 + 完整姓氏
    CONCAT(
        STRING_AGG(LEFT(NamePart, 1) + ' ', '') WITHIN GROUP (ORDER BY PartIndex),
        (SELECT NamePart FROM NameParts np2 WHERE np2.CustomerId = np.CustomerId AND np2.PartIndex = (SELECT MAX(PartIndex) FROM NameParts np3 WHERE np3.CustomerId = np.CustomerId))
    ) AS ShortenedName
FROM NameParts np
GROUP BY CustomerId, FullName;

单条字符串测试示例

如果需要测试单个姓名的转换效果,可以用以下脚本:

DECLARE @FullName NVARCHAR(100) = 'Wathsala Malshani Perera';
WITH NameParts AS (
    SELECT 
        value AS NamePart,
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS PartIndex
    FROM STRING_SPLIT(@FullName, ' ')
    WHERE value <> ''
)
SELECT 
    CONCAT(
        STRING_AGG(LEFT(NamePart, 1) + ' ', '') WITHIN GROUP (ORDER BY PartIndex),
        (SELECT NamePart FROM NameParts WHERE PartIndex = (SELECT MAX(PartIndex) FROM NameParts))
    ) AS ShortenedName;

逻辑说明

  1. 使用STRING_SPLIT函数将全名按空格拆分为独立的姓名部分,并用ROW_NUMBER()标记每个部分的顺序
  2. 通过STRING_AGG拼接除最后一个部分(姓氏)外所有部分的首字母,每个首字母后添加空格
  3. 最后拼接上完整的姓氏部分,得到符合要求的姓名格式

注:STRING_SPLIT函数仅支持SQL Server 2016及以上版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:10:32