2014-02-11 50 views
0

我有一個DATE類型的列(startdate)。MYSQL與DATE_FORMAT的日期順序

我正在使用DATE_FORMAT從查詢中獲取「月XX,XXXX」結果。

但是,當我ORDER BY日期按字母順序排序......我如何按時間順序排序日期?

我可以用不同的順序格式化startdate列,當我在ORDER BY中調用它時,它會按時間順序排序嗎?

這裏的查詢......

SELECT location, course, DATE_FORMAT(startdate, '%M %D, %Y') AS startdate 
    FROM `courses` c 
    LEFT JOIN `locdate` l ON c.id = l.id 
    ORDER BY startdate ASC 
    LIMIT 0, 10 
+0

由於@Marc回答說,'ORDER BY l.startdate ASC'很好,但將DATE_FORMAT(l.startdate,'%M%D,%Y')AS startdate'改爲'DATE_FORMAT(l.startdate,'% M%D,%Y')AS startdate_MDY',並且在腳本中使用'startdate'的地方,請改用'startdate_MDY'。 – Uours

回答

0

不要排序的格式化字符串版本。它沒有采用這種排序的格式,因爲它不是以最重要的組件排序。按ACTUAL日期字段進行排序,該日期字段將按照正確的順序自然排序。

如果您的日期格式爲yyyy mm dd,那麼它自然會按字符串排序。

SELECT ... DATE_FORMAT(...) AS formatted ... ORDER BY `startdate` ASC 
           ^^^^^^^^--different alias ^^^^^^---actual field 
1

您可以使用別名來執行此操作。我猜測其中列從何而來,但這裏是一個嘗試:

SELECT l.location, c.course, DATE_FORMAT(l.startdate, '%M %D, %Y') AS startdate 
FROM `courses` c 
LEFT JOIN `locdate` l ON c.id = l.id 
ORDER BY l.startdate ASC 
LIMIT 0, 10; 

通過使用表的別名,它知道從表列中使用的版本。

0

我只是遇到了這個問題,但這裏是我的解決方案。 讓你的正常格式的日期,然後再添加一個額外的列

$query = "SELECT `StartDate` as datesort,DATE_FORMAT(`StartDate`,'%d %M %Y') as Date, FROM `courses`"; 

我正在StartDate,並混疊datesort。然後我使用datesort進行排序。這樣我可以保持StartDate格式化,並使用datesort進行排序。

這是一個煩人的問題,但我的方法排序它(忽略雙關語)。