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

SQL Server提取带可变尾字符子串的问题求助

解决方案:提取短横与斜杠(或末尾)之间的内容

嘿Rick,我明白你的困扰了——要从带-和可选/的字符串里精准提取中间的数字,用SUBSTRING和CHARINDEX组合时总是踩坑对吧?别担心,我们可以通过判断斜杠是否存在来分情况处理,完美覆盖两种场景。

单个字符串的提取逻辑

假设你的列名为TargetColumn,表名为YourTable,可以用CASE语句分别处理有斜杠和无斜杠的情况:

SELECT
  TargetColumn AS OriginalString,
  CASE
    -- 当字符串包含斜杠时,提取-和/之间的内容
    WHEN CHARINDEX('/', TargetColumn) > 0
    THEN SUBSTRING(
           TargetColumn,
           CHARINDEX('-', TargetColumn) + 1, -- 从短横的下一个字符开始
           CHARINDEX('/', TargetColumn) - CHARINDEX('-', TargetColumn) - 1 -- 计算要提取的长度
         )
    -- 当字符串没有斜杠时,提取短横到末尾的内容
    ELSE SUBSTRING(
           TargetColumn,
           CHARINDEX('-', TargetColumn) + 1,
           LEN(TargetColumn) - CHARINDEX('-', TargetColumn)
         )
  END AS ExtractedNumber
FROM YourTable;

如果列中是多个空格分隔的片段

如果你的行数据是像AB01-52 AB01-52/1 AB01-53/2 AB01-54这样多个片段用空格拼接的,我们可以先拆分每个片段再提取:

SELECT
  split.value AS OriginalSegment,
  CASE
    WHEN CHARINDEX('/', split.value) > 0
    THEN SUBSTRING(
           split.value,
           CHARINDEX('-', split.value) + 1,
           CHARINDEX('/', split.value) - CHARINDEX('-', split.value) - 1
         )
    ELSE SUBSTRING(
           split.value,
           CHARINDEX('-', split.value) + 1,
           LEN(split.value) - CHARINDEX('-', split.value)
         )
  END AS ExtractedNumber
FROM YourTable
CROSS APPLY STRING_SPLIT(TargetColumn, ' ') AS split
WHERE split.value <> ''; -- 过滤拆分后可能出现的空字符串

逻辑说明

  • CHARINDEX('-', ...):定位短横-的位置,+1是为了跳过短横本身,从后面第一个字符开始提取
  • 有斜杠时:用斜杠的位置减去短横的位置再减1,得到-和/之间的字符长度,精准截取中间部分
  • 无斜杠时:用字符串总长度减去短横的位置,得到从短横到末尾的所有字符

这样处理后,不管是AB01-52(提取52)还是AB01-52/1(提取52)都能得到你想要的结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:07:47