SSIS CSV 导入:字符串转换为科学计数法

Posted

技术标签:

【中文标题】SSIS CSV 导入:字符串转换为科学计数法【英文标题】:SSIS CSV Import: String converts to scientific notation 【发布时间】:2019-11-22 17:05:49 【问题描述】:

我正在尝试将包含字母数字列的 CSV 文件导入到 MS SQL 表中的 VARCHAR 列中,并且遇到了数据有时会以科学记数法格式重写的问题。仅当 CSV 字符串格式类似于科学记数法时才会出现这种情况。

EX:CSV 字符串“3344E133”在 SQL 表中被导入为“3.344E+136”。

仅当 CSV 字符串以数字开头、唯一的字母为“E”且以数字结尾时才会发生这种情况。其他字符串正在导入而不被重写(例如:CSV 字符串“50524676”和“2D8FDD0C”被导入为“50524676”和“2D8FDD0C”)。

我已确认 CSV 文件中的列是文本,并且它被导入到 VARCHAR(50) SQL 列中。我正在使用平面文件源连接管理器进行导入。

关于为什么会发生这种情况或我可以做些什么来解决任何想法?

【问题讨论】:

听起来你已经将 SSIS 中列的数据类型设置为浮点数;或允许连接管理器做出决定,而不是您告诉它是DT_STR。 SSIS 不会更改数据类型,因为它“感觉像”。 SSIS 甚至不会将 DT_STR 隐式转换为 DT_WSTR,更不用说将 a 转换为浮点值了。 在高级下的平面文件连接管理器编辑器中,列设置为数据类型:字符串 [DT_STR],OutputColumnWidth 为 50。 那么您在哪里看到3.344E+136 的值? SSIS 肯定不会这样做,而且 CSV 不能是文本以外的任何其他内容;这是一个 CSV。 呃...原来这是一个 Excel 问题。使用 Excel 打开 csv,将字符串转换为科学记数法,然后重新保存,因此 csv 将转换保留为文本。当我使用干净的 csv 重新运行导入时,一切正常 - 我会将其标记为已回答,为误导性问题道歉 Excel 可能是一个糟糕的产品的众多原因之一。这太“聪明”(愚蠢)了。 【参考方案1】:

误报。使用 Excel 打开 csv 文件时出现问题。 Excel 将字符串转换为科学计数法,并将文件重新保存为 csv。然后 csv 将科学记数法格式保留为导入 SQL 表的文本。当使用干净的 csv 重新运行进程时,所有内容都正确导入。

【讨论】:

以上是关于SSIS CSV 导入:字符串转换为科学计数法的主要内容,如果未能解决你的问题,请参考以下文章

pandas.read_csv 将字符串转换为科学记数法中的“数字”(我不想要)

SAS - 从带有科学计数法数字的csv文件导入时如何保留实际数字

java代码怎么把科学计数法转换为具体数字

PowerShell 和 CSV:阻止 CSV 将文本数据转换为科学记数法

python导入csv时,如何将银行卡号正常读入,而不是默认的科学计数法?

pandas to_csv:将 pandas 写入 csv 时抑制 csv 文件中的科学记数法