Можно ли получить MONTHNAME()
только с номера месяца (1-12)? Например, если у меня есть 6,7,8
, есть ли какой-либо родной путь в MySQL, чтобы преобразовать их в June,July,August
?
MySQL MONTHNAME() из числа
Ответ 1
Вы можете использовать STR_TO_DATE()
для преобразования числа в дату, а затем обратно с MONTHNAME()
SELECT MONTHNAME(STR_TO_DATE(6, '%m'));
+---------------------------------+
| MONTHNAME(STR_TO_DATE(6, '%m')) |
+---------------------------------+
| June |
+---------------------------------+
Предупреждение. Это может быть медленным, если выполнено много строк.
Ответ 2
Несколько уродливым способом было бы SELECT MONTHNAME(CONCAT('2011-',8,'-01'));
Ответ 3
Перед тем, как прочитать Майклу большой ответ, я подумал что-то вроде этого
select elt(3,'January','February','March',....)
но его намного лучше.:)
Ответ 4
Таким способом вы можете получить другое имя недели или имя месяца
чтобы локализовать день недели:
`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'));`
- > Самстаг, 10. Апрель 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'));`
- > Sa, 10. April 2004