【发布时间】:2013-10-20 16:11:24
【问题描述】:
我正在对 CSV 文件执行批量数据导入。在 CSV 文件中,我的“日期”列包含格式为“YYYYDDMMHHMM”的日期(例如 200603010929)。
就目前而言,如果我在创建表时选择“smalldatetime”,数据导入将失败并出现以下错误:
批量加载数据转换错误(类型不匹配或无效字符 对于指定的代码页)对于第 2 行第 2 列(日期)。
据我了解,要使其正常工作,日期必须采用某种格式才能工作。
因此,我的一个想法是将日期值导入到 VARCHAR 类型的字段中,然后在导入完成后,我想对每一行执行 UPDATE 以将日期转换为 smalldatetime。这会延长导入过程,但我认为这比尝试对 CSV 数据进行查找和替换(这是一个巨大的数据集)要容易得多,也快得多。
所以,我的问题是: 1)这可能吗? 2)我如何实现它?
这是我目前所拥有的:
UPDATE NYSE
SET [date]=CONVERT(smalldatetime, [date])
这失败了,因为文本的格式不正确。是否可以在 CONVERT 函数中指定字符串的格式,还是有其他方法?
我感谢所有 cmets。谢谢。
【问题讨论】:
-
真的是 YYYYDDMM 而不是 YYYYMMDD?所以 20060301 是 1 月 3 日,而不是 3 月 1 日?
-
您确定没有时间的 YYYYDDMM 实际导入正确吗?那些可能是交换 D 和 M 值...
-
所以你不在乎数据是否准确?所以用户输入了 3 月 1 日,但您将其解释为 1 月 3 日,这可以吗?我很困惑。
-
您在该页面的何处看到 YYYY-DD-MM?
-
我建议告诉向您提供此数据的人不要再傻了,并提供有效的格式。或者在添加 SQL Server 复杂性之前使用非常简单的命令行程序对文件进行预处理。
标签: sql sql-server sql-server-2008 sql-server-2008-r2 data-import