¿Hay MONTHNAME()
obtener MONTHNAME()
solo del número del mes (1-12)? Por ejemplo, si tengo 6,7,8
¿hay alguna forma nativa en MySQL para transformarlos en June,July,August
?
Puede usar STR_TO_DATE()
para convertir el número a una fecha, y luego volver con MONTHNAME()
SELECT MONTHNAME(STR_TO_DATE(6, '%m')); +---------------------------------+ | MONTHNAME(STR_TO_DATE(6, '%m')) | +---------------------------------+ | June | +---------------------------------+
Advertencia: Esto podría ser lento si se hace en muchas filas.
Una forma algo fea sería SELECT MONTHNAME(CONCAT('2011-',8,'-01'));
Antes de leer la gran respuesta de Michael, había pensado algo como esto
select elt(3,'January','February','March',....)
pero el suyo es mucho mejor. 🙂
De esta forma puede obtener un nombre de semana o nombre de mes de idioma diferente
para localizar el día de la semana:
`SELECT ELT( WEEKDAY('2004-04-10')+1, 'Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag');`
versión larga con mes:
`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. de abril de 2004
lo mismo para timestamp unix:
`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. Abril 2004