SQL Update varchar到日期错误

时间:2009-09-02 08:16:47

标签: sql datetime char

我有一张表,其中有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

由于 卡尔

3 个答案:

答案 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