其中子句给出错误:"The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range


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

在选择子句中它不会给出错误,那么为什么它会在 Where 子句中给出错误。

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

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

看起来你有一个放错了括号...T-SQL 消息与数据无关。 尝试更改:
CONVERT (NVARCHAR (20), CONVERT (DATE, GETDATE()), 110) , 至
CONVERT (NVARCHAR (20), CONVERT (DATE, GETDATE(), 110))
这样110就在那括号内。

如果这不能解决您的问题,您可以尝试添加一个TOP 1(如 SELECT TOP 1... )以确认您的基本代码是否正常工作(至少在第一行)。

您还可以检查未使用当前逻辑正确转换的值:使用 ISDATE 函数,该函数"如果表达式是有效的日期、时间或日期时间值,则返回 1;否则,0":
WHERE ISDATE( CONVERT(DATE,GETDATE(),110) + ' ' + v.ParameterValue ) = 0

希望有帮助...

相关内容

最新更新