2014-09-30 101 views
-1

我有以下的T-SQL:從字符串轉換日期和/或時間時SQL鑄造焦炭爲datetime

轉換失敗:

set @sql = 'select id, query from '[email protected]+' where '+GETUTCDATE()+'> cast(ExpirationDate as datetime)' 
execute sp_executesql @sql 

我得到這個錯誤。

我該如何正確轉換它?

+1

一個沒有人問過的大問題....爲什麼哦爲什麼你要將日期時間信息存儲在varchar列中?使用適當的數據類型,而不是始終與nonSARGable查詢摔跤,因爲首先必須做的是CAST/CONVERT到數據類型,它應該放在第一位。 – 2014-09-30 14:29:44

回答

0
SET @sql = 
    'SELECT id, query 
    FROM '[email protected]+' 
    WHERE CAST('''+CAST(GETUTCDATE() AS VARCHAR(30))+''' AS DATETIME) 
      > CAST(ExpirationDate AS datetime)' 
EXECUTE sp_executesql @sql 
+0

這實際上工作得很好。謝謝 – user3057678 2014-09-30 14:25:19

2

只要把函數調用查詢字符串:

set @sql = 'select id, query from '[email protected]+' where GETUTCDATE() > cast(ExpirationDate as datetime)'; 

我看不到任何優勢,把它在你打電話之前sp_executesql

+0

+1愚蠢的我轉換兩次,而我可以在動態sql內使用它... – 2014-09-30 14:10:43

+0

試過,但我有一個需要使用動態sql – user3057678 2014-09-30 14:25:55

+0

這仍然使用動態sql。沒有要求你跳過額外的箍來獲得GETUTCDATE的值。讓SQL服務器工作而不是打擊它。 – 2014-09-30 14:30:49