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

SQL Server如何拆分全名为姓和名并截取姓氏前20字符解决数据截断报错

解决方案

你可以在现有LastName的截取逻辑外层再加一层SUBSTRING,限制取前20个字符即可,同时建议补充空格不存在的异常处理,避免CHARINDEX返回0时触发语法错误。

修改后的完整SQL语句如下:

SELECT 
    -- 兼容无空格的DisplayName场景,避免CHARINDEX为0时报错
    SUBSTRING(DisplayName, 1, CASE WHEN CHARINDEX(' ', DisplayName) > 0 THEN CHARINDEX(' ', DisplayName) - 1 ELSE LEN(DisplayName) END) AS [FirstName],
    -- 限制LastName最长取20个字符,匹配目标表字段长度要求
    SUBSTRING(
        CASE WHEN CHARINDEX(' ', DisplayName) > 0 THEN SUBSTRING(DisplayName, CHARINDEX(' ', DisplayName) + 1, LEN(DisplayName)) ELSE '' END,
        1,
        20
    ) AS [LastName]
FROM
    [Destination_Table]
WHERE 
    VoidFlag = 0
    AND ControlPlanCode = @ControlPlan

说明

  • 核心修改点是对LastName的截取结果额外加了一层SUBSTRING(xxx,1,20),强制只取前20个字符,解决数据截断报错问题
  • 额外补充的CASE判断用于处理DisplayName不含空格的异常场景:如果DisplayName没有空格,原有逻辑中CHARINDEX(' ', DisplayName) - 1会得到-1,导致SUBSTRING执行报错,新增判断后无空格时会把全值作为FirstName,LastName留空
  • 如果你确认业务场景下的DisplayName必然存在空格,也可以简化写法,仅修改LastName部分即可:
SUBSTRING(SUBSTRING(DisplayName, CHARINDEX(' ', DisplayName) + 1, LEN(DisplayName)),1,20) AS [LastName]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:45:02