使用 SSIS 进行数据转换

Data conversion using SSIS

我有以下完美的表达式,

ISNULL(LateDays < 0 ? (DT_WSTR,30)OriginalTransactionAmount : "") ? "0"
: (LateDays < 0 ? (DT_WSTR,30)OriginalTransactionAmount : "")

问题是 OriginalTransactionAmount 是小数,我希望整个表达式都是小数。 LateDats 是 (DT_14) 整数。当我尝试替换 DT_WSTR 时,它给了我一个错误。关于如何将其设为十进制的任何线索?

我在报告中使用这些数据,这让我很为难,因为报告工具将它作为文本读取。

分解成碎片:

isnull(LateDays) ? (DT_NUMERIC,18,2) 0 :

LateDays < 0 ? (DT_NUMERIC,18,2) OriginalTransactionAmount : (DT_NUMERIC,18,2) 0

LateDays 在布尔部分,不是结果。所有结果必须是相同的数据类型。

问题

问题的原因是当使用 ? : 条件运算符时,false 和 true 结果必须具有相同的数据类型。所以当使用 LateDays < 0 ? (DT_NUMERIC,18,2)OriginalTransactionAmount : "" 时有一个 Decimal 结果和一个 String 结果,你可以使用下面的表达式代替这个 *(将 "" 替换为 NULL(DT_NUMERIC):

ISNULL(LateDays < 0 ? (DT_NUMERIC,18,2)OriginalTransactionAmount : NULL(DT_NUMERIC,18,2)) ? (DT_NUMERIC,18,2)0 
: (LateDays < 0 ? (DT_NUMERIC,18,2)OriginalTransactionAmount : NULL(DT_NUMERIC,18,2))

其他建议

尝试使用 REPLACENULL() 函数

(REPLACENULL(LateDays,0) < 0) ? (DT_NUMERIC,18,2)OriginalTransactionAmount : (DT_NUMERIC,18,2) 0

我用 "0" 替换了 " "。然后再添加一个数据转换任务,改成十进制就可以了。

ISNULL(LateDays < 0 ? (DT_WSTR,30)OriginalTransactionAmount : "0") ? "0" 
: (LateDays < 0 ? (DT_WSTR,30)OriginalTransactionAmount : "0")