我有一张表,其中有500万条日期记录存储为char(10),格式为yyyy / mm / dd。我需要将这些转换为datetime,所以我使用:
UPDATE [Database].[dbo].[Table]
SET [DoB]=convert(datetime,[DoBText],103)
GO
但我收到错误:
“将varchar数据类型转换为日期时间数据类型会导致超出范围的值。”
现在,我已经尝试修复数据,因此不会发生这种情况 - 即1900年以下或2000以下没有“yyyy”,30岁以上没有“dd”(2月28日),12岁以下没有“mm” 0.没有NULL。
转换仍然失败。
有什么方法可以让SQL跳过错误的转换然后再继续?
E.g。类似的东西:
SET [DoB]= try to do [DoB]=convert(datetime,[DoBText],103) if fails SET [DoB] = NULL
由于 卡尔
答案 0 :(得分:1)
转换样式103以dd / mm / yyyy格式处理日期。请改用转换样式111来处理格式为yyyy / mm / dd。
答案 1 :(得分:1)
尝试以下方法:
SET DATEFORMAT YMD;
UPDATE [Database].[dbo].[Table]
SET [DoB]=[DoBText]
WHERE ISDATE( [DoBText] ) = 1
这将转换为有效日期/时间值的那些,其余的将保持原样。
答案 2 :(得分:0)
以yyyyMMdd格式插入日期或使用参数,您将不会遇到此问题。 或者执行以下某项操作
SET DATEFORMAT DMY
SET DATEFORMAT MDY
SET DATEFORMAT YMD
SET DATEFORMAT YDM