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

如何用SSIS表达式无硬编码提取符号间的动态整数数据

无硬编码提取SSIS中两个下划线间的动态整数

没问题,我刚好处理过类似的SSIS字符串提取需求,给你两个靠谱的无硬编码方案,完全适配你说的下划线间动态整数的场景:

方案1:使用SUBSTRING + CHARINDEX嵌套(兼容所有SSIS版本)

这个方案通过定位前后两个下划线的位置,动态计算要截取的起始点和长度,完全不依赖硬编码的位置或长度:

SUBSTRING(
    [YourSourceColumn], -- 替换成你实际的数据源列名
    CHARINDEX("_", [YourSourceColumn]) + 1, -- 第一个下划线的下一位就是整数的起始位置
    -- 计算整数的长度:第二个下划线位置 - 第一个下划线位置 - 1
    CHARINDEX("_", [YourSourceColumn], CHARINDEX("_", [YourSourceColumn]) + 1) 
    - CHARINDEX("_", [YourSourceColumn]) 
    - 1
)

关键逻辑解释:

  • CHARINDEX("_", [YourSourceColumn]):定位第一个下划线的索引位置
  • CHARINDEX("_", ..., 起始位置):从第一个下划线的下一位开始找第二个下划线的位置,避免匹配到第一个下划线
  • 最后通过两个下划线的位置差,动态算出要提取的整数长度,不管整数是1位还是N位都能适配

方案2:使用TOKEN函数(SQL Server 2017+ SSIS版本适用)

如果你的SSIS环境是SQL Server 2017及以后的版本,TOKEN函数会让表达式更简洁直观:

TOKEN([YourSourceColumn], "_", 2)

逻辑解释:

TOKEN(字符串, 分隔符, 第N个片段)会把字符串按分隔符拆分成片段,这里指定取第2个片段,刚好就是两个下划线之间的整数部分,完全无硬编码,自动适配动态长度。

额外的边界处理建议

如果你的数据中可能存在少于两个下划线的异常行,可以加个条件判断避免报错:

CASE 
    -- 判断是否存在至少两个下划线
    WHEN CHARINDEX("_", [YourSourceColumn]) > 0 
         AND CHARINDEX("_", [YourSourceColumn], CHARINDEX("_", [YourSourceColumn]) + 1) > 0
    THEN TOKEN([YourSourceColumn], "_", 2) -- 或者方案1的SUBSTRING表达式
    ELSE NULL -- 替换成你需要的默认值,比如空字符串或特定标记
END

这样不管中间的整数是几位,都能自动提取,完全不用硬编码长度或者位置,适配动态变化的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:16:44