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
上面的查詢提供了錯誤Where子句給出錯誤:「將nvarchar數據類型轉換爲日期時間數據類型導致超出範圍值。」
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value
當我使用寫
DATEDIFF(mi, CONVERT (DATETIME, (CONVERT (NVARCHAR (20), CONVERT (DATE, GETDATE()), 110) + ' ' + v.ParameterValue)), GETDATE()) <= 60
在SELECT子句中它不給錯誤,那麼它爲什麼給錯誤WHERE子句中..
V.ParameterValues表包含以下類型的值: -
8:45
8:45
08:40:00
08:30:00
8:45
你能說什麼是v.ParameterValue值? –
如果'ParameterValue'中的其他值與時間不相似(可能是NonTeachingStaffStartTime以外的其他值),那麼您可能註定要注意,直到將其分成兩個單獨的查詢爲止。無法保證「WHERE」子句參數的評估順序如何,即使您將部分內容移入子查詢中,總是有[SQL Server不應該引發不合邏輯的錯誤](https://connect.microsoft.com/SQLServer/feedback/details/537419/sql-server-should-not-raise-illogical-錯誤)通知您,該策略不會保護您。 –
以下幫助,還是你仍然看到一個問題? –