2010-10-08 128 views
0

我正在寫一個查詢來獲取列的所有值的結果,該列是varchar類型..小於'29/08/2010'(date )SQL Server查詢幫助...需要將varchar轉換爲日期

我的查詢:

SELECT * FROM EMPLOYEES WHERE COLUMN1 < '29/08/2010' 

這裏COLUMN1是varchar類型。我正在使用SQL Server 2005

有沒有辦法讓這成爲可能.. ??

請幫我。

在此先感謝

+2

無論您做什麼,請記住要將該列更改爲datetime數據類型。它將在未來避免巨大的問題。 – 2010-10-08 06:17:34

回答

1

你有你的COLUM試圖

SELECT * FROM EMPLOYEES WHERE CONVERT(datetime, COLUMN1, 103) > CONVERT(datetime, '29/08/2010', 103) 
+0

啊是的 - 現在改變它,並看到它是上述相同的答案 - 啊:) – ramad 2010-10-08 06:23:10

+0

除了我看到上面的例子使用110(mm-dd-yy) - 我會說它應該是103(日/月/年)。 – ramad 2010-10-08 06:25:32

+0

在哪裏,而不是在哪裏 – anishMarokey 2010-10-08 06:33:41

2

你可以嘗試

SELECT * FROM EMPLOYEES WHERE convert(datetime,COLUMN1,110) < convert(datetime, '29/08/2010',110) 
+0

我得到這個錯誤...一個字符數據類型轉換爲日期時間數據類型導致超出範圍日期時間值 – kayteen 2010-10-08 06:18:22

+0

在列中將有一些無效日期將有 – anishMarokey 2010-10-08 06:33:07

+0

我檢查了數據...我發現所有的值都是這種格式'dd/mm/yyyy' – kayteen 2010-10-08 06:40:06

0

如果您嚴格存儲數據的數據N1,那麼爲什麼你的數據類型定義爲varchar?

從性能的角度來看,它會殺死性能,因爲將Varchar轉換爲DateTime或任何其他的會使索引效率低下,如果有的話。通常使用RIGHT()或CONVERT,LIKE'%%'或Like'a%'等函數將使WHERE子句成爲不可Sargable,從而導致索引掃描操作檢索數據。

+0

我有這個列作爲一個動態的..用於生成動態SQL ...有時我可能會得到像NAME/EMAIL/CURRENCY/DATE – kayteen 2010-10-08 08:49:19