我不知道爲什麼這個錯誤不會出現在你的SELECT語句,因爲我可以用重現錯誤只是
SET DATEFORMAT DMY;
SELECT CONVERT(DATETIME, CONVERT(VARCHAR,CAST(GETUTCDATE() AS DATE)))
Example of Error
你是依靠本地化的轉換設置你,應該使用明確的轉換,例如
SET DATEFORMAT DMY;
SELECT CONVERT(DATETIME, CONVERT(VARCHAR, CAST(GETUTCDATE() AS DATE), 111), 111)
通過明確界定的日期格式都轉換爲varchar,而從varchar(111),就可以避免任何隱含的轉換。
然而,如果您的日期/時間被存儲爲這樣的事應該沒有必要對所有的轉換和從varchar,這是東西出問題只是更多機會,不必要的工作,你可以簡單地添加一個時間到一個日期時間。例如
DECLARE @Date1 DATETIME = DATEADD(HOUR, 1, GETUTCDATE()),
@Date2 DATETIME = DATEADD(DAY, 1, GETUTCDATE());
SELECT [Date1] = @Date1,
[Date2] = @Date2,
[Date1/Time2] = CAST(CAST(@Date1 AS DATE) AS DATETIME) +
CAST(@Date2 AS TIME);
從我可以從查詢收集你只是想獲得的結果,其中的meas_pain.datetime
的時間小於當前UTC時間,不分日期的。因此,您應該能夠簡化您的查詢,只需:
SELECT schedules.id
FROM meas_pain
LEFT JOIN schedules
ON schedules.id = meas_pain.schd_id
WHERE meas_pain.schd_id = 9150
AND CAST(meas_pain.[DateTime] AS TIME) < CAST(GETUTCDATE() AS TIME);
並刪除進一步的多餘轉換。
Simplified example on SQL Fiddle
ADENDUM
顯然,這個時間比較是不是你以後(雖然它是什麼,你已經發布的查詢正在進行),所以我假設GETUTCDATE()是隻是爲了示範。
您嘗試進行轉換是相同的:
CAST(CAST(GETUTCDATE() AS DATE) AS DATETIME) + CAST(meas_pain.[DateTime] AS TIME)
Another example on SQL Fiddle using the above conversion
您所查詢的是很多不必要的轉換。擺脫他們,這將是很容易破解。 – Kaf 2013-02-18 09:42:47