2011-07-28 46 views
3

我的表的日期列是VARCHAR而不是datetime。SELECT varchar列的最短日期

entry 
'03/01/2011' 
'03/22/2011' 
'05/22/2010' 

當我做了

SELECT min(entry) FROM table 

我會得到'03/01/2011' ,因爲它是最小的字母順序。我想檢索'05/22/2010',而不是最短的日期。如何將列轉換爲日期時間並獲取最小值。

感謝

+5

儘管給出的答案,這將工作 - 這就是爲什麼你不把日期存儲在一個varchar列! – Jamiec

回答

9

假設所有條目都是 '澆注料' 爲datetime

SELECT MIN(CAST(entry as datetime)) 
FROM table 

假設可能有一些情況下,entry心不是一個datetime

SELECT MIN(CAST(ISNULL(NULLIF(ISDATE([entry]),0),'31/12/9999') as datetime)) 
FROM table 

如果所有記錄的日期列,如@Steve倫斯建議,我將在datetype更改爲datetime場,以節省未來的問題

0

嘗試CAST它。

SELECT min(CAST(entry AS DATETIME)) FROM table 

希望這會有所幫助。

7

我會修復你的數據庫模式。將列類型更改爲日期時間。否則,你將永遠有問題。

+1

+1此外,如果您有SQL 2008或更高版本,請使用日期而不是日期時間。由於您不存儲時間數據,因此您將在邏輯和物理磁盤空間上節省每行5個字節。 – brian

+0

-1不回答問題,因爲在提問者的環境中可能不可能 – mson

+0

根據標籤,環境是SQL Server。也許你的意思是這些要求不允許。很公平。但是,這一建議不僅解決了目前的問題,而且還有可能在未來出現更多問題。建設性的建議是一件好事。 –