使用SSIS进行数据转换

时间:2018-02-16 16:35:57

标签: sql-server ssis expression etl

我有以下表达式完美无缺,

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

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

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

3 个答案:

答案 0 :(得分:1)

将其分解成碎片:

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

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

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

答案 1 :(得分:1)

问题

问题原因是当使用? :条件运算符时,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

答案 2 :(得分:1)

我将" "替换为"0"。然后在那之后添加了一个数据转换任务并将其更改为十进制并且它可以工作。

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