我正在对CSV文件执行批量数据导入。在CSV文件中,“日期”列包含格式为“ YYYYDDMMHHMM”的日期(例如200603010929)。
就目前而言,如果我在创建表时选择“ smalldatetime”,则数据导入将因以下错误而失败:
第2行第2列(日期)的批量加载数据转换错误(类型不匹配或指定代码页的字符无效)。
据我了解,要使其生效,日期必须是某种格式才能起作用。
因此,我的一个想法是将日期值导入到VARCHAR类型的字段中,然后在导入完成后,我想对每一行执行UPDATE,以将日期转换为smalldatetime。这将延长导入过程,但是我认为这比尝试查找和替换CSV数据(这是一个庞大的数据集)要容易得多,也快得多。
因此,我的问题是:1)这可能吗?2)我该如何实施?
这是我到目前为止的内容:
UPDATE NYSE
SET [date]=CONVERT(smalldatetime, [date])
由于文本格式不正确,此操作将失败。是否可以在CONVERT函数中指定字符串的格式,还是有其他方法?
我感谢所有评论。谢谢。
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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句