Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS从CSV派生的列(将字符串强制转换为浮点)_Ssis_Expression_Derived Column - Fatal编程技术网

SSIS从CSV派生的列(将字符串强制转换为浮点)

SSIS从CSV派生的列(将字符串强制转换为浮点),ssis,expression,derived-column,Ssis,Expression,Derived Column,我得到了如下的CSV。 该列得到一些空行,CSV以字符串形式给出值。但我想让它成为一个浮点数,像'3.00000'一样,有5个小数。首先,我需要替换“,”符号并替换空值 我使用了这个派生列表达式:(DT_R8)REPLACE(ISNULL(Col1)-“0.0000”:Col1,“,”),但它不起作用。 你们知道更好的表达方式吗? 该列如下所示: +---------+ | Col1 | +---------+ | 3,00000 | | | | 4,00000 | | 6

我得到了如下的CSV。 该列得到一些空行,CSV以字符串形式给出值。但我想让它成为一个浮点数,像'3.00000'一样,有5个小数。首先,我需要替换“,”符号并替换空值 我使用了这个派生列表达式:
(DT_R8)REPLACE(ISNULL(Col1)-“0.0000”:Col1,“,”)
,但它不起作用。 你们知道更好的表达方式吗? 该列如下所示:

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

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

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

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

完成后,您可以验证预览是否已修复

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

(DT_R8)REPLACE(Col1 == "" ? "0.0000" : Col1,",",".")
最后,您是否认识到将“.”替换为“.”将导致“300000”转换为3.0?请确保这是预期的行为

遵循上述步骤将生成以下派生列


“不工作”不是问题陈述。它是否引发错误?它是否无法替换逗号?它是否无法将值转换为小数?它是否无法正确处理空行?什么不工作?错误:0xC0049064在数据流任务中,派生列[2]:尝试执行类型转换时出错。错误:0xC0209029在数据流任务中,派生列[2]:SSIS错误代码DTS_E_InjectedTransferormFailureOnError。“派生列”失败,因为出现错误代码0xC0049064,并且“派生列.输出[派生列输出]”列[派生列1]上的错误行处理失败“指定出错时失败。指定组件的指定对象上发生错误。在此之前可能会发布错误消息,其中包含有关失败的详细信息。错误:0xC0047022位于数据流任务,SSIS。管道:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件“派生列”(2)上的ProcessInput方法在处理输入“派生列输入”(3)时失败,错误代码为0xC0209029。标识的组件从ProcessInput方法返回了一个错误。请键入cast error,抱歉提供了错误的信息