Problema:
Desea ordenar las filas por número de mes, dados los nombres de los meses (desea que enero se muestre primero, diciembre último).
Ejemplo:
El birthday
la tabla contiene dos columnas:nombre y birthday_month
. Los meses se dan en nombres, no en números.
nombre | mes_cumpleaños |
---|---|
Ronan Tisha | NULO |
Diciembre | enero |
Angie Julia | abril |
Narelle Dillan | abril |
Purdie Casey | enero |
Donna Nell | NULO |
Blaze Graeme | octubre |
Desea ordenar las filas por birthday_month
.
Solución:
SELECT * FROM birthday ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));
El resultado se ve así (las filas están ordenadas en orden ascendente por birthday_month
):
nombre | mes_cumpleaños |
---|---|
Purdie Casey | enero |
Angie Julia | abril |
Narelle Dillan | abril |
Blaze Graeme | octubre |
Ronan Tisha | enero |
Diciembre | NULO |
Donna Nell | NULO |
Discusión:
Para ordenar las filas por mes a partir de enero y terminando en diciembre, debe convertir el mes en un número ('January
' a 1, 'February
' a 2
, etc.). De lo contrario, vería 'December
' antes de 'January
'. La función TO_DATE(birthday_month, 'Month') convierte el nombre de un mes completo en una fecha en el '0001-MM-01
' formato. Por ejemplo, obtienes '0001-12-01
' para diciembre.
Ahora puede usar la función EXTRACTO (MES DESDE la fecha) para extraer el mes de este valor de fecha. El mes será un número entre 1
y 12
.
Combinando estas dos funciones, puedes obtener el mes como un número usando la siguiente fórmula:
EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'))
Pon esta expresión después de ORDER BY
para ordenar las filas por mes. Si desea ver primero el último mes, deberá ordenar en orden descendente. Para hacer esto, necesitas usar un DESC
palabra clave, como esta:
SELECT * FROM birthday ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) DESC;
Tenga en cuenta que en PostgreSQL y Oracle, NULL
Los correos electrónicos se muestran en último lugar cuando se clasifican en orden ascendente y en primer lugar cuando se clasifican en orden descendente. Además, las filas con el mismo birthday_month
se muestran en orden aleatorio (es posible que vea Angie Julia
segundo y Narelle Dillan
tercero, o Narelle Dillan
segundo y Angie Julia
tercero).