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

如何将指定SQL Server CASE查询转换为SSIS派生列表达式?

SSIS派生列组件对应表达式实现

以下表达式完全匹配给出的T-SQL查询逻辑,可直接在派生列组件中使用,默认输出数值类型:

FINDSTRING(DE_NOVEDAD,"/Op.",1) == 0 ? 0 :
(
    LEFT(RIGHT(SUBSTRING(DE_NOVEDAD,FINDSTRING(DE_NOVEDAD,"/Op. ",1),12),7),2) == "64"
    ? (DT_I4)REPLACE(REPLACE(REPLACE(RIGHT(SUBSTRING(DE_NOVEDAD,FINDSTRING(DE_NOVEDAD,"/Op.",1),12),7),"/",""),"C",""),".","")
    : 0
)

核心规则说明

  • 函数对应关系
    • T-SQL的CHARINDEX(匹配串, 原字段)对应SSIS的FINDSTRING(原字段, 匹配串, 1),第三个参数固定填1,代表从字符串头部查找第一个匹配项,和CHARINDEX默认行为一致
    • T-SQL的LIKE '64%'无直接对应函数,通过LEFT(待校验字符串,2) == "64"实现,即判断目标字符串前两位为64
    • T-SQL的CASE WHEN分支判断,对应SSIS表达式的三元运算符判断条件 ? 成立返回值 : 不成立返回值
    • SUBSTRING/RIGHT/REPLACE的参数逻辑和T-SQL基本一致,注意SSIS表达式中字符串常量必须用双引号包裹,不能使用单引号
  • 必要兼容处理
    • 增加了FINDSTRING(DE_NOVEDAD,"/Op.",1) == 0的前置判断,避免原字段中不存在"/Op."字符串时,FINDSTRING返回0导致SUBSTRING函数报起始位置非法的运行错误
    • 对REPLACE处理后的字符串增加(DT_I4)强转,保证THEN分支返回值和ELSE分支的0类型一致,避免派生列报类型不匹配错误
    • 若需要输出字符串类型结果,可去掉(DT_I4)强转,同时把ELSE分支的0改为"0"即可

注意原T-SQL中两处匹配串存在差异:WHEN分支查找的是带尾部空格的/Op. ,THEN分支查找的是不带空格的/Op.,如果是原SQL书写笔误,把表达式中两处FINDSTRING的匹配串统一即可,避免取值偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:42:13