在1762行之后,在SQL中转换为时间失败

时间:2013-08-08 08:38:35

标签: sql casting sql-server-2012

(更新以下评论)

我在SQL Server 2012上遇到了一个奇怪的行为,这个请求没问题:

select top 2002 cast(myTimeStr as time) from tbWithTime
order by ID

但是

select top 2003 cast(myTimeStr as time) from tbWithTime
order by ID

失败
  

Msg 241,Level 16,State 1,Line 1
  从字符串转换日期和/或时间时转换失败。

而2002年和2003年的线都等于'14:30'

然后,当我尝试专门演绎这条2003线时,它成功了。

我的配置:

Name                                                    Version
Microsoft SQL Server Management Studio                  10.50.1600.1
Microsft SQL Server 2012                                11.0.3339.0

2 个答案:

答案 0 :(得分:2)

要查找导致问题的实际行,请尝试以下操作:

 SELECT * FROM tbWithTime WHERE TRY_CONVERT(time,myTimeStr) IS NULL

TRY_CONVERT

  

如果转换成功,则返回强制转换为指定数据类型的值;否则,返回null。

答案 1 :(得分:1)

您可以尝试这样找到有趣的行:

select myTimeStr
from tbWithTime
where  myTimeStr not like '[0-1][0-9][:][0-5][0-9]'
   and myTimeStr not like '2[0-3][:][0-5][0-9]'

或者你可以选择有效的行:

select cast(myTimeStr as time) 
from tbWithTime
where myTimeStr like '[0-1][0-9][:][0-5][0-9]'
   or myTimeStr like '2[0-3][:][0-5][0-9]'