条款给出错误的地方:“将nvarchar数据类型转换为日期时间数据类型会导致超出范围的值。”

时间:2014-03-04 10:23:59

标签: sql sql-server sql-server-2008

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数据类型转换为日期时间数据类型会导致超出范围的值

当我使用写

DATEDIFF(mi, CONVERT (DATETIME, (CONVERT (NVARCHAR (20), CONVERT (DATE, GETDATE()), 110) + ' ' + v.ParameterValue)), GETDATE()) <= 60

在Select Clause中它没有给出错误,那么为什么它在Where子句中给出了错误..

V.ParameterValues表包含以下类型的值: -

8:45
8:45
08:40:00
08:30:00
8:45

1 个答案:

答案 0 :(得分:0)

看起来你的括号错误......而且T-SQL消息与你的数据无关。尝试改变:
CONVERT (NVARCHAR (20), CONVERT (DATE, GETDATE()), 110),到 CONVERT (NVARCHAR (20), CONVERT (DATE, GETDATE(), 110))
以便110在括号内。

如果这不能解决您的问题,您可以尝试添加TOP 1(例如SELECT TOP 1...)以确认您的基本代码有效(至少在第一行)。

您还可以检查未使用当前逻辑正确转换的值:使用ISDATE函数,“Returns 1 if the expression is a valid date, time, or datetime value; otherwise, 0”:
WHERE ISDATE( CONVERT(DATE,GETDATE(),110) + ' ' + v.ParameterValue ) = 0

希望有帮助...