Подтвердить что ты не робот

MySQL MONTHNAME() из числа

Можно ли получить MONTHNAME() только с номера месяца (1-12)? Например, если у меня есть 6,7,8, есть ли какой-либо родной путь в MySQL, чтобы преобразовать их в June,July,August?

4b9b3361

Ответ 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