T-Sql日期时间转换失败

时间:2012-02-28 14:04:31

标签: sql sql-server-2008 tsql

我的所有列都是varchar所以我使用公共表达式表将[Column 0]转换为datetime,因为[Column 0]包含此格式的日期2012-02-28 00:00:08.000

WITH pss AS 
(
select CONVERT(datetime, [Column 0]) as t, [Column 1], [Column 2], [Column 3], [Column 4], [Column 5], [Column 6]
from PWS where [Column 0]  like '%2/28%'
)
select *from pss where datepart(HOUR,[t]) >= '11' AND datepart(HOUR,[t]) <= '12'

我收到以下消息

  

Msg 242,Level 16,State 3,Line 1
  将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

3 个答案:

答案 0 :(得分:2)

您还需要提供CONVERT提示,以了解varchar中日期的结构。 ymd序列将被识别为102:

convert(datetime, '2012-02-28 00:00:08.000', 102)

有关CONVERT的说明和可用的日期时间样式,请参阅http://msdn.microsoft.com/en-us/library/ms187928.aspx

答案 1 :(得分:0)

SQL Server中不允许使用早于1753年1月1日的日期时间数据类型的值。 SQL Server仅接受从1753年到9999年的日期。如果表中的Column0包含早于1753年1月1日的日期,则可能存在此类问题。

答案 2 :(得分:0)

如果所有其他方法都失败了,我会使用游标*循环遍历每一行,然后,对于每一行,尝试将[Column 0]的值转换为DateTime。使用TRY..CATCH块对CONVERT尝试进行环绕,然后在CATCH块中输出一些诊断信息,以便准确判断哪一行导致了错误。

注意*:是的,通常要避免使用游标,但在这种诊断情况下我认为它很有用。