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

求助:如何在MSSQL中提取字符串的中间部分

提取MSSQL字符串中间分隔部分的解决方案

没问题,我来帮你搞定这个字符串提取的需求!你的字符串是用|分隔的三部分,要提取中间的第二部分对吧?下面给你两种实用的方法,适配不同版本的SQL Server:

方法1:兼容所有SQL Server版本(用CHARINDEX + SUBSTRING)

这种方法不依赖高版本特性,适合所有环境。核心思路是先定位两个|的位置,再截取它们之间的内容:

SELECT 
    SUBSTRING(
        YourColumn,
        CHARINDEX('|', YourColumn) + 1,
        CHARINDEX('|', YourColumn, CHARINDEX('|', YourColumn) + 1) - CHARINDEX('|', YourColumn) - 1
    ) AS MiddlePart
FROM YourTable;

代码说明:

  • CHARINDEX('|', YourColumn):找到第一个|的位置
  • CHARINDEX('|', YourColumn, CHARINDEX('|', YourColumn) + 1):从第一个|的下一位开始搜索,得到第二个|的位置
  • SUBSTRING的第二个参数是截取起始点(第一个|的位置+1),第三个参数是截取长度(第二个|位置减去第一个|位置再减1)

方法2:SQL Server 2016及以上版本(用STRING_SPLIT)

如果你的SQL Server版本在2016或更高,可以用更简洁的拆分函数来实现:

-- SQL Server 2022及以上版本直接用ordinal列
SELECT 
    value AS MiddlePart
FROM YourTable
CROSS APPLY STRING_SPLIT(YourColumn, '|')
WHERE ordinal = 2;

如果是2016-2019版本(不支持ordinal列),可以用行号来筛选第二部分:

SELECT 
    MiddlePart
FROM (
    SELECT 
        value AS MiddlePart,
        ROW_NUMBER() OVER (PARTITION BY YourColumn ORDER BY (SELECT NULL)) AS rn
    FROM YourTable
    CROSS APPLY STRING_SPLIT(YourColumn, '|')
) t
WHERE rn = 2;

测试验证

拿你提供的示例字符串x0gdfg992|x05gjy652|t0kk2:-测试,两种方法都会准确返回x05gjy652,完全满足需求,而且不需要修改任何原始数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:55:59