0

(更新以下评论)

我在 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

失败了

消息 241,级别 16,状态 1,第 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
4

2 回答 2

2

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

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

TRY_CONVERT

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

于 2013-08-08T08:46:22.873 回答
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]'
于 2013-08-08T09:58:35.307 回答