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

SQL Server 2017提取第11个¥后内容,求Oracle regexp_substr等效方法

SQL Server 2017提取第11个¥后的所有内容的实现方法

方法一:定位分隔符位置直接截取

通过多次调用CHARINDEX定位第11个¥的位置,再用SUBSTRING截取后续所有内容,结果与原字符串中第11个¥之后的内容完全一致(包含空分隔段和末尾的分隔符)。

DECLARE @targetStr NVARCHAR(MAX) = N'GSLO¥10-00950000207406¥61500¥CRS15596859¥20220714153630¥2022-07-14¥¥¥¥¥¥¥63031¥0¥¥79087¥6793¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥';
DECLARE @delimiter NCHAR(1) = N'¥';

-- 循环定位第11个分隔符的位置
DECLARE @splitPos INT = CHARINDEX(@delimiter, @targetStr);
SELECT @splitPos = CHARINDEX(@delimiter, @targetStr, @splitPos + 1)
FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) AS seq(n);

-- 提取目标内容
SELECT SUBSTRING(@targetStr, @splitPos + 1, LEN(@targetStr) - @splitPos) AS ExtractedContent;

方法二:利用STRING_SPLIT和STRING_AGG拼接(需兼容级别130+)

SQL Server 2017及以上版本支持带ordinal参数的STRING_SPLIT,可按顺序拆分字符串,筛选出第12个及以后的片段后,用STRING_AGG拼接还原后续内容,结果与原字符串后续部分一致。

DECLARE @targetStr NVARCHAR(MAX) = N'GSLO¥10-00950000207406¥61500¥CRS15596859¥20220714153630¥2022-07-14¥¥¥¥¥¥¥63031¥0¥¥79087¥6793¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥';
DECLARE @delimiter NCHAR(1) = N'¥';

SELECT STRING_AGG(value, @delimiter) WITHIN GROUP (ORDER BY ordinal) AS ExtractedContent
FROM STRING_SPLIT(@targetStr, @delimiter, 1)
WHERE ordinal > 11;

与Oracle实现的对比

Oracle中用REGEXP_SUBSTR(str, '[^¥]+', 1, 12)可提取第12个分隔片段,但如果需要保留后续所有内容(包括空分隔段),上述SQL Server的两种方法更贴合需求:方法一直接截取的效率更高,方法二则更灵活,适合需要单独处理拆分后片段的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:45:38