将VARCHAR转换为SMALLDATETIME作为UPDATE语句的一部分

西亚兰·加拉格尔(Ciaran Gallagher)

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

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

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

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

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

因此,我的问题是:1)这可能吗?2)我该如何实施?

这是我到目前为止的内容:

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

由于文本格式不正确,此操作将失败。是否可以在CONVERT函数中指定字符串的格式,还是有其他方法?

我感谢所有评论。谢谢。

亚伦·伯特兰(Aaron Bertrand)
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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Jackson ObjectMapper将Json的一部分转换为HashMap

如何将Java源文件的一部分转换为Kotlin?

将Vec <String>转换为Rust中的&str的一部分?

将文本字符串的一部分转换为分数

如何在子查询中使用HAVING作为Select语句的一部分

将字符串值的一部分转换为数字并连接

Laravel-将函数的一部分转换为排队的语句

如何将Redux存储的一部分转换为数组

将邮箱消息转换为PDF:哪一部分?

将日期转换为星期日期名称和一天的一部分

将字符串的一部分转换为java.util.Date

使用变量作为语句的一部分

如何仅将字符串列表的一部分转换为整数

将Ctypes数组的一部分转换为结构

如何将字符串的一部分转换为整数?

将字符串的一部分转换为数据帧的不同列

从注册表中捕获作为键名一部分的GUID,并将其转换为变量

将标题作为CURL的一部分

将字符串的一部分转换为哈希值

将文本文件的一部分转换为列表

如何将字符串的一部分转换为斜体?

选择选项数组作为select语句的一部分

将资源ID的最后一部分转换为var

Swift-变量在if语句中作为更新的一部分,但随后将还原

将字节数组值的一部分转换为String

Java:将字符串转换为在 url 中使用作为 get 的一部分

如何在 mysql 中执行 IF 语句作为 SELECT 语句的一部分

将字符串的一部分转换为数组

将嵌套的 Json 对象的一部分转换为 Java Map