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 | enero |
Diciembre | abril |
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 (CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END);
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, necesita los meses en números (no nombres). Puede convertir los nombres de los meses en meses numéricos usando CASE WHEN
cláusula. Después del CASE
palabra clave, especifique el nombre de la columna. Luego, después de cada WHEN
, indique el valor en esta columna, use THEN
palabra clave y especifique el nuevo valor que le gustaría asignar en lugar del anterior. Aquí, la columna es birthday_month
, los valores actuales en esta columna son 'January
', 'February
', …, 'December
', y los nuevos valores son los meses numéricos 1
, 2,
…, 12
. Después de terminar de convertir todos los valores, recuerde usar el END
palabra clave para cerrar el CASE WHEN
cláusula. Echa un vistazo:
CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END
Así es como convierte el nombre de un mes en un número de mes. Puede usarlo para ordenar las filas en orden ascendente por mes; solo utilícelo en ORDER BY
cláusula.
Tenga en cuenta que en SQLite, NULL
Los correos electrónicos se muestran primero cuando se clasifican en orden ascendente y los últimos 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
tercera). Para cambiar el orden a descendente, use el DESC
palabra clave después de la columna en ORDER BY
cláusula. Así es como debería verse la consulta:
SELECT * FROM birthday ORDER BY (CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END) DESC;