【发布时间】:2015-02-13 11:42:10
【问题描述】:
SELECT SchoolID
FROM ParameterDetails
INNER JOIN
EstablishmentParameterValues AS v
ON v.ParameterID = ParameterDetailID
WHERE NameResourceKey = 'NonTeachingStaffStartTime'
AND DATEDIFF(mi, CONVERT (DATETIME, (CONVERT (NVARCHAR (20), CONVERT (DATE, GETDATE()), 110) + ' ' + v.ParameterValue)), GETDATE()) <= 60
上面的查询给出了错误
将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围
当我使用 write 时
DATEDIFF(mi, CONVERT (DATETIME, (CONVERT (NVARCHAR (20), CONVERT (DATE, GETDATE()), 110) + ' ' + v.ParameterValue)), GETDATE()) <= 60
在Select Clause中它没有给出错误,那么为什么它在Where Clause中给出错误..
V.ParameterValues 表包含以下类型的值:-
8:45
8:45
08:40:00
08:30:00
8:45
【问题讨论】:
-
你能说什么是v.ParameterValue值吗?
-
如果
ParameterValue中有其他值与时间不相似(可能是NonTeachingStaffStartTime以外的其他值),那么您可能注定要失败,直到将其拆分为两个单独的查询。无法保证评估WHERE子句参数的顺序,即使您例如将其中的一部分移到子查询中,总是有SQL Server should not raise illogical errors 通知您该策略不会保护您。 -
以下是否有帮助,或者您仍然发现问题?
标签: sql sql-server sql-server-2008