关于sql:如何在SSIS中的数据转换转换过程中将字符串转换为货币?

How to convert a string to money in the Data Conversion Transformation process in SSIS?

如何在SSIS中的数据转换转换过程中将字符串转换为货币?

我的源文件是一个 Excel 文件。我添加了数据转换转换以将 Price 列转换为数据类型 "currency[DT_CY]".

1
2
3
SOURCE VALUE : $50,240.30

Expected RESULT : 50240.30

SQL Destination 表的列价格为数据类型:Money

但是,转换失败并出现以下错误:

1
The"Data Conversion.Outputs[Data Conversion Output].Columns[Price]" failed because error code 0xC020907F occurred, AND the error ROW disposition ON"Data Conversion.Out

此查询有效.. 很好.. 但是,此查询仅在我们收到表中的数据后才应用。

我们正在尝试以"Money"数据类型加载到表中时获取数据。

1
SELECT CONVERT(MONEY, [Price]) AS [Price] , * FROM dbo.StagingTable

根据 Nick\\ 的评论,源文件转换工作正常。
但是,我们需要将字符串转换为 Money 数据类型。

来源价格:$55,176.80

派生列表达式:REPLACE(REPLACE([Price],"$",""),",","")
数据类型:DT_WSTR

输出价格:55176.80


正如@Nick.McDermaid 所建议的,在将数据插入到 SQL Server 之前,尝试清理数据并使用派生列执行转换。还要确保检查 NULL 值。您可以使用以下表达式:

1
ISNULL([Price]) ? NULL(DT_CY) : ([Price] =="" ? NULL(DT_CY) : (DT_CY)(REPLACE(REPLACE((DT_WSTR,50)[Price],"$",""),",","")))

删除 $ 符号和逗号 , 后,转换操作将正常工作。

有用的链接

  • SSIS 如何将字符串 (DT_STR) 转换为货币 (DT_CY) 当源有超过 2 位小数时


我认为你必须像这样使用 CONVERT :

1
(DT_DECIMAL,3)[Price]

您可以找到有关 CAST 函数的信息:https://docs.microsoft.com/en-us/sql/integration-services/expressions/cast-ssis-expression?view=sql-server-2017

这是在 SSIS 上执行转换的方式。