(更新以下评论)
我在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
答案 0 :(得分:2)
要查找导致问题的实际行,请尝试以下操作:
SELECT * FROM tbWithTime WHERE TRY_CONVERT(time,myTimeStr) IS NULL
如果转换成功,则返回强制转换为指定数据类型的值;否则,返回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]'