【发布时间】:2021-03-11 12:29:37
【问题描述】:
我有一个包含 43 000 000 行的表。在 datetime 列中,数据看起来是 2020.04.22T04:39:29.359,它的类型是 VARCHAR。
它看起来像 ISO 格式,但有 .,对于 ISO,我需要 -。
将这些行中的值转换为日期时间的最佳方法是什么?
我的一个变种是 subst 。到-:
UPDATE table
SET [Column 3] = REPLACE([Column 3], '.', '-');
但是我需要从最后缩短一微秒。
这个怎么剪?
或者你可以建议更真实的方法。
【问题讨论】:
-
"它的类型是
VARCHAR。" 真正的问题是你为什么首先使用varchar?修复设计,修复问题。 -
请注意
DATETIME与DATETIME2不同,它不支持以毫秒为单位的全精度,它仅精确到(如果你可以这么称呼它)3 毫秒。特别是像04:39:29.359这样的值无法精确表示,将四舍五入为04:39:29.360。对于某些应用程序而言,这无关紧要,而对于其他应用程序而言(当必须将数据与原始数据进行比较时)。因此,虽然VARCHAR绝对不是正确使用的类型,但DATETIME也不一定。
标签: sql-server tsql datetime iso8601