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

MS SQL如何提取竖线分隔字符串中的第二个值?

解决SQL提取竖线分隔第二个值的问题

你原语句的问题核心是没搞对SUBSTRING的第三个参数——它要的是截取的长度,不是结束位置。你现在传的是第二个竖线的位置,所以会从第一个竖线后开始,按这个位置数截取字符,自然会带上后面的内容。

直接用下面的修改语句就能精准提取第二个值:

SELECT SUBSTRING(
    column_name,
    CHARINDEX('|', column_name) + 1,
    CHARINDEX('|', column_name, CHARINDEX('|', column_name) + 1) - CHARINDEX('|', column_name) - 1
)
FROM [name].[name].[table_name]

简单说下逻辑:

  • 第一个CHARINDEX('|', column_name)找到第一个竖线的位置,加1就是第二个值的起始点
  • CHARINDEX('|', column_name, CHARINDEX('|', column_name) + 1)是从第一个竖线的下一位开始找第二个竖线的位置,用这个位置减去第一个竖线的位置再减1,刚好就是两个竖线之间的字符长度,这样SUBSTRING就只会截取中间的目标值

如果你的数据里存在只有1个竖线或者没有竖线的行,怕报错可以加个判断兜底:

SELECT 
    CASE 
        WHEN LEN(column_name) - LEN(REPLACE(column_name, '|', '')) >= 1 THEN
            SUBSTRING(
                column_name,
                CHARINDEX('|', column_name) + 1,
                CHARINDEX('|', column_name, CHARINDEX('|', column_name) + 1) - CHARINDEX('|', column_name) - 1
            )
        ELSE NULL  -- 这里可以换成你需要的默认值,比如空字符串''
    END AS second_value
FROM [name].[name].[table_name]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:42:02