我遇到了將一個表中的VARCHAR轉換爲DATETIME,然後在比較中使用它的問題。格式('2010-09-02 10:38:31.000')在所有記錄上似乎都是正確的,我可以毫無問題地選擇數據。但是,如果我嘗試在WHERE子句中使用新的日期時間,則會出現以下錯誤:從字符串轉換日期和/或時間時轉換失敗。SQL Server 2008將varchar轉換爲datetime
所以僅僅是明確的,這個工程:
SELECT Field1, Field2, CAST(Field3 AS DATETIME) AS DateTaken FROM MyTable;
返回所有預期的數據,有沒有空日期。以下失敗與前面提到的錯誤。
SELECT Field1, Field2 FROM MyTable WHERE CAST(Field3 AS DATETIME) > @startDate;
我嘗試使用視圖來檢索數據,但它有相同的錯誤。接下來,我嘗試爲數據創建一個臨時表,如下所示...
SELECT Field1, Field2, CAST(Field3 AS DATETIME) AS Field3 INTO _MyTable;
SELECT Field1, Field2 FROM _MyTable WHERE Field3 > @startDate;
哪一個能夠成功。
我所有的搜索只是導致格式不正確的日期和/或區域設置,導致havok在我的情況下似乎不是原因。每次我需要使用DATETIME轉換時,我寧願不創建表,所以我在這裏做錯了什麼?非常感謝幫助!
什麼是@startDate變量的數據類型的特定日期格式?你有什麼價值? – 2010-11-04 02:46:45
在最終版本中,它也會從VARCHAR中轉換,但爲了將CAST作爲變量消除,我使用GETDATE() – 2010-11-04 02:58:31
爲什麼不只是傳入日期時間並避免投射? – clyc 2010-11-04 03:01:52