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

SQL Server中如何截取最后一个指定分隔符前的字符串?

SQL Server提取最后一个'-'分隔符前的字符串

通用解决方案(兼容所有SQL Server版本)

最简洁高效的方式是结合REVERSE和CHARINDEX函数,通过反转字符串定位最后一个'-'的位置,再截取目标内容:

SELECT 
    YourColumn,
    -- 处理无分隔符的情况,避免返回空值
    CASE 
        WHEN CHARINDEX('-', YourColumn) = 0 THEN YourColumn
        ELSE SUBSTRING(YourColumn, 1, LEN(YourColumn) - CHARINDEX('-', REVERSE(YourColumn))) 
    END AS Result
FROM YourTable

逻辑说明:

  1. REVERSE(YourColumn):将原字符串反转,比如123-21-30变为03-12-321
  2. CHARINDEX('-', REVERSE(YourColumn)):找到反转后第一个'-'的位置,对应原字符串最后一个'-'的位置
  3. LEN(YourColumn) - 上述位置:计算原字符串中需要截取的长度
  4. SUBSTRING:从开头截取对应长度的内容,得到最后一个'-'之前的字符串

针对SQL Server 2016+的备选方案

如果使用2016及以上版本,也可以通过拆分字符串后重新拼接(需保证拆分顺序):

SELECT 
    YourColumn,
    STRING_AGG(value, '-') WITHIN GROUP (ORDER BY seq) AS Result
FROM YourTable
CROSS APPLY (
    SELECT value, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS seq
    FROM STRING_SPLIT(YourColumn, '-')
) AS splits
WHERE seq < (SELECT COUNT(*) FROM STRING_SPLIT(YourColumn, '-'))
GROUP BY YourColumn

验证示例

假设数据表YourTable的YourColumn字段包含以下记录:

  • 123-21
  • 123-21-30

执行通用方案的查询后,Result列将分别返回:

  • 123
  • 123-21

内容的提问来源于stack exchange,提问作者Adam Fiqrie Putra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:35:20