【发布时间】:2022-01-04 00:43:58
【问题描述】:
我有一个有 1M 行和一个 CREATED_AT varchar 列的表。本列日期字符串的格式:
- 2021-10-13 05:03:42.638+00
- 2021-10-18 21:28:49.98+00
- 2021-12-08 02:09:03.17+00
我想将此字符串转换为新的datetime 列(称为CREATED_DT)。
尝试
select
cast([CREATED_AT] as datetime)
from
[mydb].[dbo].[mytable]
错误:
从字符串转换日期和/或时间时转换失败
select
convert(datetime, [CREATED_AT])
from
[mydb].[dbo].[mytable]
从字符串转换日期和/或时间时转换失败
select
try_convert(DateTime, [CREATED_AT])
from
[mydb].[dbo].[mytable]
查询执行,但返回所有空值。
select
try_convert(DateTime, [CREATED_AT], 108)
from
[mydb].[dbo].[mytable]
查询执行,但返回所有空值。
select
try_cast([CREATED_AT] as datetime)
from
[mydb].[dbo].[mytable]
查询执行,但返回所有空值。
【问题讨论】:
-
使用
TRY_CONVERT和样式代码,但实际上你应该修复你的设计;永远不要将日期和时间值存储为varchar。 -
我不是这个独立系统/组织的数据所有者。将调查 TRY_CONVERT,对我来说是新的。谢谢
-
你能定义“最佳”吗?您能否确保包括所有可能的边缘情况(例如,只有 1 或 0 个小数位,或者缺少 +00,或者如果需要观察 +00 以外的任何偏移量),并指出丢失精度是否正常(.例如,638 永远不能存储为日期时间)。除非您推回此系统/组织,以便为使用它们的系统提供正确、明确的日期格式,否则可能存在各种垃圾数据。
标签: sql datetime casting sql-server-2012