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

SQL Server中如何通过字符串分割提取!分隔的首字段值存入Name列

SQL Server 提取首个分隔符前字段值实现方案

你的原始数据用!作为分隔符拼接多段内容,要提取第一个!前的姓名存入Name列,直接用字符串定位+截取的方式实现即可,性能最优且兼容绝大多数SQL Server版本。

基础查询写法

核心逻辑:先用CHARINDEX函数找到字符串中第一个!的位置,再用LEFT函数从字符串开头截取到该位置的前一位,就是目标姓名段。
假设你的原表名为Staff,存储拼接内容的原始列名为RawInfo,查询语句如下:

SELECT
    RawInfo,
    LEFT(RawInfo, CHARINDEX('!', RawInfo) - 1) AS Name
FROM Staff;

针对你给出的示例数据,执行后返回结果如下:

RawInfoName
John Amber!New York!ManagerJohn Amber
Lena Jackson!Cubec!EngineerLena Jackson
Otis Willey!Indiana!SalesmanOtis Willey

边界容错处理

如果你的数据里存在不含!的异常记录,上面的写法会因为CHARINDEX返回0、截取长度为负数触发报错,需要加CASE判断做兼容:

SELECT
    RawInfo,
    CASE
        WHEN CHARINDEX('!', RawInfo) > 0 THEN LEFT(RawInfo, CHARINDEX('!', RawInfo) - 1)
        ELSE RawInfo -- 无分隔符时直接取整段内容
    END AS Name
FROM Staff;

新增持久化列写法

如果你需要给表新增固定存储的Name列,不需要每次查询都计算,可以创建持久化计算列,后续原始列更新时Name列会自动同步值:

ALTER TABLE Staff
ADD Name AS
    CASE
        WHEN CHARINDEX('!', RawInfo) > 0 THEN LEFT(RawInfo, CHARINDEX('!', RawInfo) - 1)
        ELSE RawInfo
    END PERSISTED;

说明:该写法比字符串拆分方案性能高很多,不需要遍历拆分整段字符串,仅需定位第一个分隔符位置即可完成截取,百万级数据量下也能快速执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:51:17