2

我正在对 CSV 文件执行批量数据导入。在 CSV 文件中,我的“日期”列包含格式为“YYYYDDMMHHMM”的日期(例如 200603010929)。

就目前而言,如果我在创建表时选择“smalldatetime”,则数据导入将失败并出现以下错误:

第 2 行第 2 列(日期)的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

据我了解,要使其起作用,日期必须是某种格式才能起作用。

因此,我的一个想法是将日期值导入到 VARCHAR 类型的字段中,然后在导入完成后,我想对每一行执行 UPDATE 以将日期转换为 smalldatetime。这会延长导入过程,但我认为它比尝试对 CSV 数据(这是一个巨大的数据集)进行查找和替换要容易得多,也快得多。

所以,我的问题是:1)这可能吗?2)我如何实现它?

这是我到目前为止所拥有的:

UPDATE NYSE
SET [date]=CONVERT(smalldatetime, [date])

这失败了,因为文本的格式不正确。是否可以在 CONVERT 函数中指定字符串的格式,还是有其他方法?

我感谢所有评论。谢谢。

4

1 回答 1

3
DECLARE @s TABLE([date] VARCHAR(20));

INSERT @s SELECT '200603010929';

UPDATE @s SET [date] = CONVERT(CHAR(16), CONVERT(SMALLDATETIME, 
  LEFT([date],4) + SUBSTRING([date],7,2) + SUBSTRING([date],5,2) 
  + ' ' + STUFF(RIGHT([date],4),3,0,':')), 120);

SELECT [date], CONVERT(SMALLDATETIME, [date]) FROM @s;

如果它实际上是 YYYYMMDD,那么它会稍微简单一些:

DECLARE @s TABLE([date] VARCHAR(20));

INSERT @s SELECT '200603010929';

UPDATE @s SET [date] = CONVERT(CHAR(16), CONVERT(SMALLDATETIME, 
  LEFT([date],8) + ' ' + STUFF(RIGHT([date],4),3,0,':')), 120);

SELECT [date], CONVERT(SMALLDATETIME, [date]) FROM @s;
于 2013-10-12T18:16:42.653 回答