我有以下的T-SQL:從字符串轉換日期和/或時間時SQL鑄造焦炭爲datetime
轉換失敗:
set @sql = 'select id, query from '[email protected]+' where '+GETUTCDATE()+'> cast(ExpirationDate as datetime)'
execute sp_executesql @sql
我得到這個錯誤。
我該如何正確轉換它?
我有以下的T-SQL:從字符串轉換日期和/或時間時SQL鑄造焦炭爲datetime
轉換失敗:
set @sql = 'select id, query from '[email protected]+' where '+GETUTCDATE()+'> cast(ExpirationDate as datetime)'
execute sp_executesql @sql
我得到這個錯誤。
我該如何正確轉換它?
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
這實際上工作得很好。謝謝 – user3057678 2014-09-30 14:25:19
只要把函數調用內查詢字符串:
set @sql = 'select id, query from '[email protected]+' where GETUTCDATE() > cast(ExpirationDate as datetime)';
我看不到任何優勢,把它在你打電話之前sp_executesql
。
+1愚蠢的我轉換兩次,而我可以在動態sql內使用它... – 2014-09-30 14:10:43
試過,但我有一個需要使用動態sql – user3057678 2014-09-30 14:25:55
這仍然使用動態sql。沒有要求你跳過額外的箍來獲得GETUTCDATE的值。讓SQL服務器工作而不是打擊它。 – 2014-09-30 14:30:49
一個沒有人問過的大問題....爲什麼哦爲什麼你要將日期時間信息存儲在varchar列中?使用適當的數據類型,而不是始終與nonSARGable查詢摔跤,因爲首先必須做的是CAST/CONVERT到數據類型,它應該放在第一位。 – 2014-09-30 14:29:44