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

如何提取TrackNo字段中第三个连字符后的所有字符?

提取第三个连字符后的内容

问题描述

有一个TrackNo字段,示例值如下:

8070444981-010023-013123-INBBTC-C
601724-072923-078923-INAAAX-B

需要提取第三个-之后的全部内容(包含该连字符),预期结果:

-INBBTC-C
-INAAAX-B

之前尝试的SUBSTRING+CHARINDEX写法逻辑有误,导致无法适配所有场景,原语句:

select substring( Trackno,
charindex('-', TrackNo , (charindex('-', TrackNo , 1))
+charindex('-', TrackNo, (charindex('-', TrackNo , 1))+1)),20) 
from table

解决方案

方法1:嵌套CHARINDEX定位第三个连字符

通过三次嵌套CHARINDEX精准定位第三个-的位置,再用SUBSTRING从该位置截取到字符串末尾:

SELECT SUBSTRING(TrackNo, CHARINDEX('-', TrackNo, CHARINDEX('-', TrackNo, CHARINDEX('-', TrackNo, 1) + 1) + 1), LEN(TrackNo))
FROM your_table;

解释:

  • 第一层CHARINDEX('-', TrackNo, 1):找到第一个-的位置
  • 第二层CHARINDEX('-', TrackNo, 第一层结果 + 1):在第一个-之后找第二个-的位置
  • 第三层CHARINDEX('-', TrackNo, 第二层结果 + 1):在第二个-之后找第三个-的位置
  • 用SUBSTRING从第三个-的位置开始截取到字符串结尾,用LEN(TrackNo)替代固定长度20,确保适配所有长度的后续内容

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

如果你的SQL Server版本支持STRING_SPLIT,可以通过拆分字符串再拼接的方式实现:

SELECT CONCAT('-', STRING_AGG(value, '-')) AS Result
FROM your_table
CROSS APPLY STRING_SPLIT(TrackNo, '-')
WHERE ordinal > 3
GROUP BY TrackNo;

解释:

  • STRING_SPLIT按-拆分字符串,ordinal字段记录拆分后片段的顺序
  • 筛选ordinal > 3的片段(即第四个及以后的内容)
  • 用STRING_AGG将这些片段用-拼接,再加上开头的-得到目标结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:54:51