2011-08-12 51 views
65

如何在此查詢中指定mySQL的MONTH()函數返回'08'而不是8?獲取mySQL MONTH()使用前導零?

我希望排序按日期工作。目前得到的最新結果像

2006-9 
2007-1 
2007-10 
2007-11 

當前查詢:

SELECT COUNT(*), CONCAT(YEAR(`datetime_added`), '-', MONTH(`datetime_added`)) as date FROM `person` WHERE (email = '' OR email IS NULL) 
GROUP BY date 
ORDER BY date ASC 

回答

137

使用以下代替:

DATE_FORMAT(`datetime_added`,'%Y-%m') 

說明:

DATE_FORMAT()函數允許您使用下表中描述的說明符(從逐步取自documentation)按照您喜歡的方式格式化日期。所以格式字符串'%Y-%m'表示:「全年(4位數字),後面跟一個短劃線(-),後跟一個兩位數的月份編號」。

請注意,您可以通過設置lc_time_names系統變量來指定用於日/月名稱的語言。非常有用。有關更多詳情,請參閱documentation

Specifier Description 
%a Abbreviated weekday name (Sun..Sat) 
%b Abbreviated month name (Jan..Dec) 
%c Month, numeric (0..12) 
%D Day of the month with English suffix (0th, 1st, 2nd, 3rd, …) 
%d Day of the month, numeric (00..31) 
%e Day of the month, numeric (0..31) 
%f Microseconds (000000..999999) 
%H Hour (00..23) 
%h Hour (01..12) 
%I Hour (01..12) 
%i Minutes, numeric (00..59) 
%j Day of year (001..366) 
%k Hour (0..23) 
%l Hour (1..12) 
%M Month name (January..December) 
%m Month, numeric (00..12) 
%p AM or PM 
%r Time, 12-hour (hh:mm:ss followed by AM or PM) 
%S Seconds (00..59) 
%s Seconds (00..59) 
%T Time, 24-hour (hh:mm:ss) 
%U Week (00..53), where Sunday is the first day of the week 
%u Week (00..53), where Monday is the first day of the week 
%V Week (01..53), where Sunday is the first day of the week; used with %X 
%v Week (01..53), where Monday is the first day of the week; used with %x 
%W Weekday name (Sunday..Saturday) 
%w Day of the week (0=Sunday..6=Saturday) 
%X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V 
%x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v 
%Y Year, numeric, four digits 
%y Year, numeric (two digits) 
%% A literal 「%」 character 
%x x, for any 「x」 not listed above 
+8

雖然不是他問什麼,這似乎回答什麼,他應該問。 –

+0

爲什麼月份的月份可能爲0? – SOFe

+0

因爲0000-00-00是一個有效的日期(取決於設置) – Mchl

3

MONTH()返回一個整數,所以當然沒有前導零。您需要將其轉換爲一個字符串,將剩下的'0'填入最後2個字符。

+0

4歲的問題得到downvoted,沒有評論?優雅。 –

+2

這是+1補償anon ;-) – Kromster

20

您可以使用填充像

SELECT 
    COUNT(*), 
    CONCAT(YEAR(`datetime_added`), '-', LPAD(MONTH(`datetime_added`), 2, '0')) as date 
FROM `person` 
WHERE (email = '' OR email IS NULL) 
GROUP BY date 
ORDER BY date ASC 
+0

滿足配置單元中的需求。 DATE_FORMAT()函數在配置單元中不受支持。你的答案有幫助。 –

6
DATE_FORMAT(`datetime_added`,'%Y - %m') 
+0

我相信沒有空格:''%Y-%m'' – SrAxi