2011-08-11 39 views

回答

62

您可以使用STR_TO_DATE()將數字轉換爲日期,然後用MONTHNAME()

SELECT MONTHNAME(STR_TO_DATE(6, '%m')); 

+---------------------------------+ 
| MONTHNAME(STR_TO_DATE(6, '%m')) | 
+---------------------------------+ 
| June       | 
+---------------------------------+ 

警告回:如果在很多行做這可能是緩慢的。

+0

真棒10月。謝謝。 –

+0

感謝您的警告。我所做的查詢只有一兩年,所以最多24行。 –

+0

也許可以在MEMORY表和INNER JOIN中存儲月份名稱。或在應用程序中應用... – Dor

4

一個有點醜陋的方式將SELECT MONTHNAME(CONCAT('2011-',8,'-01'));

2

之前閱讀邁克爾最偉大的答案,我曾想過這樣的事情

select elt(3,'January','February','March',....) 

但他一個要好的多。 :)

0

這樣的方式可以得到不同的語言weekname或一個月名

本地化平日:

`SELECT ELT(WEEKDAY('2004-04-10')+1, 'Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag');` 

長版本月:

`SELECT DATE_FORMAT('2004-04-10', CONCAT(ELT(WEEKDAY('2004-04-10')+1, 'Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'),', %d. ', ELT(MONTH('2004-04-10'), 'Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'),' %Y'));` 

- > Samstag, 10. April 2004

unix-timestamp相同:

`SELECT DATE_FORMAT(FROM_UNIXTIME(1081548000), CONCAT(ELT(WEEKDAY(FROM_UNIXTIME(1081548000))+1, 'Mo','Di','Mi','Do','Fr','Sa','So'),', %d. ', ELT(MONTH(FROM_UNIXTIME(1081548000)), 'Jan.','Feb.','März','April','Mai','Juni','Juli','Aug.','Sept.','Okt.','Nov.','Dez.'),' %Y'));` 

- >薩,2004年