2

I got a CSV like below. The column got some empty rows and the CSV gives the values as a string. But I want to make it a float like ‘3.00000’ with 5 decimals. First, I need to replace the ‘,’ symbol and replace the null values I used this derived column expression: (DT_R8)REPLACE(ISNULL(Col1) ? "0.0000" : Col1,",",".") but it is not working. Do you guys know a better expression? The column is like below:

+---------+
|  Col1   |
+---------+
| 3,00000 |
|         |
| 4,00000 |
| 6.56565 |
|         |
| 4.54545 |
+---------+
4

1 回答 1

3

我相信你需要在这里看两件事。首先,其中带有逗号的单元格很可能被识别为字符串,因此它们将使用引号的文本限定符。如果您没有在 SSIS 中明确设置它,那么 SSIS 将保留引号,然后您将无法将该字符串转换为数字。要确认,在您的连接管理器上,检查您的预览,如果您的号码有如下双引号,那么您需要将文本限定符设置为引号。

设置文本限定符之前的快照:

在此处输入图像描述

现在,如果是这种情况,您需要转到常规,并确保您的文本限定符设置为“,如下所示

在此处输入图像描述

完成后,您可以验证您的预览现在是否已修复 在此处输入图像描述

您遇到的问题是假设您正在处理 NULL 值。当您的列是从平面文件导入的字符串类型时,情况并非如此。你在这里处理一个空字符串。因此,您需要将表达式修改为:

(DT_R8)REPLACE(Col1 == "" ? "0.0000" : Col1,",",".")

最后,您是否认识到将“,”替换为“。” 会导致 "3,00000" 被转换为 3.0 吗?请确保这是预期的行为。

遵循上述将导致以下派生列

在此处输入图像描述

于 2019-12-09T16:56:15.293 回答