【发布时间】:2009-09-02 08:16:46
【问题描述】:
我有一个表格,其中包含 500 万条日期记录,以 char(10) 格式存储,格式为 yyyy/mm/dd。我需要将这些转换为日期时间,所以我使用:
UPDATE [Database].[dbo].[Table]
SET [DoB]=convert(datetime,[DoBText],103)
GO
但我得到了错误:
“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”
现在,我已经尝试修复数据,因此不会发生这种情况 - 即没有低于 1900 或高于 2000 的“yyyy”,没有高于 30 的“dd”(2 月为 28),没有高于 12 或更低的“mm” 0. 没有 NULL。
转换仍然失败。
有什么方法可以让 SQL 在出现错误时跳过转换并继续执行?
例如类似:
SET [DoB]= try to do [DoB]=convert(datetime,[DoBText],103) if fails SET [DoB] = NULL
谢谢 卡尔
【问题讨论】:
-
有些月份有 31 天 - 我希望你没有破坏你的数据:S
-
另外,没有月份零 - 月份应该是 1-12 包括在内。