使用 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")
我有以下完美的表达式,
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")