2013-04-25 56 views
1

我查詢的數據庫有一個用戶表,其中包含用戶爲網站註冊的日期。如何按日期排列列未格式化的日期?

日期輸入到VARCHAR列沒有適當的日期格式是這樣的:

Apr 18 2013 12:27PM 

當我SELECT MAX (dateColumn)我得到一個值跨越日期的範圍大約一半。我已經考慮使用子字符串來抓取年份,然後是月份,然後是日期並按順序排列。問題是,先從天日期以0將一個字符縮短這樣的:

May 1 2013 12:27PM 

有一個簡單的方法來找到最高日起,在不改變數據庫的結構?

+2

您不應該將日期存儲在varchar列中。而你的問題是這個錯誤的直接結果。我強烈建議將該列更改爲真正的「DateTime」並遷移數據。 – 2013-04-25 10:13:08

+0

是的,不幸的是,它不是我,使網站/分貝。由於已有200多個用戶,我無法更改數據庫。 – blarg 2013-04-25 10:15:00

+2

當然可以。添加一個新列,將數據從舊列遷移到新列。放下舊的專欄。調整你的應用。這是標準的模式遷移(無論如何您都需要這樣做),用戶數量與此無關。 – 2013-04-25 10:17:24

回答

2

嘗試在SQLServer中的數據類型之間的轉換(包括日期格式)hereselect max(convert(datetime, dateColumn, 109))

的進一步信息。

+0

109表示什麼? – blarg 2013-04-25 10:30:58

+0

@JackDamery:第三個參數是從字符字段轉換爲日期字段時使用的格式; 109表示mon dd yyyy hh:mi:ss:mmmAM(或PM) - 您也可以使用100。您可以在這裏查看完整的日期格式列表以及有關在數據類型之間轉換的更多信息:http://msdn.microsoft.com/zh-cn/library/ms187928%28v=sql.90%29.aspx – 2013-04-25 10:36:02

0

將列轉換爲具有格式爲「YYYYMMDD」格式的值,然後對該列進行排序。

0

嘗試將varchar轉換爲datetime格式並執行。您應該以相同的格式保存日期。它只是將varchar轉換爲datetime的例子。

Select * from tblName 
    where Convert(datetime, Convert(varchar(12),DOJ,106)) as DOJ >= 
      Convert(datetime, Convert(varchar(12),'2013-04-28',106))