Problema:
Desea ordenar las filas por fecha.
Ejemplo 1:
El exam la tabla tiene dos columnas, subject y exam_date .
| asunto | fecha_examen |
|---|---|
| Matemáticas | 2019-12-19 |
| Inglés | 2020-01-08 |
| Ciencia | 2020-01-05 |
| Salud | 2020-01-05 |
| Arte | NULO |
Desea ordenar las filas por exam_date .
Solución:
SELECT * FROM exam ORDER BY exam_date;
El resultado se ve así (las filas están ordenadas en orden ascendente por exam_date ):
| Asunto | Fecha del examen |
|---|---|
| Arte | NULO |
| Matemáticas | 2019-12-19 |
| Ciencia | 2020-01-05 |
| Salud | 2020-01-05 |
| Inglés | 2020-01-08 |
Discusión:
Usa el ORDER BY palabra clave y el nombre de la columna por la que desea ordenar. De esta forma, ordenará los datos en orden ascendente por esta columna. También podría usar el ASC palabra clave para dejar claro que el orden es ascendente (la fecha más antigua se muestra primero, la fecha más reciente se muestra en último lugar, etc.).
SELECT * FROM exam ORDER BY exam_date ASC;
Si desea ver la fecha más reciente primero y la fecha más antigua al final, debe ordenar en orden descendente. Usa el DESC palabra clave en este caso.
SELECT * FROM exam ORDER BY exam_date DESC;
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 exam_date se muestran en orden aleatorio (puede ver Science segundo y Health tercero, o Health segundo y Science tercero).
Ejemplo 2:
El exam la tabla tiene las siguientes columnas:subject , exam_year , exam_month y exam_day . Los meses se dan en nombres, no en números.
| asunto | examen_año | examen_mes | dia_examen |
|---|---|---|---|
| Matemáticas | 2019 | diciembre | 19 |
| Inglés | 2020 | enero | 8 |
| Ciencia | 2020 | enero | 5 |
| Salud | 2020 | enero | 5 |
| Arte | NULO | NULO | NULO |
Solución:
SELECT *
FROM exam
ORDER BY exam_year,
(CASE exam_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),
exam_day;
El resultado se ve así (las filas están ordenadas en orden ascendente por exam_year , exam_month y exam_day ):
| asunto | examen_año | examen_mes | dia_examen |
|---|---|---|---|
| Arte | NULO | NULO | NULO |
| Matemáticas | 2019 | diciembre | 19 |
| Salud | 2020 | enero | 5 |
| Ciencia | 2020 | enero | 5 |
| Inglés | 2020 | enero | 8 |
Discusión:
Para ordenar las filas por fecha de examen, debe ordenar primero por año, luego por mes numérico (no el nombre del mes) y finalmente por día. Puede convertir los nombres de los meses en meses numéricos con CASE WHEN cláusula. Después del CASE palabra clave, especifique el nombre de la columna. Luego, después de cada CUÁNDO, indique el valor en esta columna, use la palabra clave ENTONCES y especifique el nuevo valor que le gustaría asignar en lugar del anterior. Aquí, la columna es exam_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 exam_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 al ordenar las filas por fecha, es decir, por año, mes numérico y día.
ORDER BY exam_year,
(CASE exam_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),
exam_day
De esta forma, puede ordenar las filas en orden ascendente por fecha. El NULL s se mostrará primero. Para cambiar el orden a descendente, use el DESC palabra clave después de cada columna en ORDER BY cláusula. Así es como debería verse toda la consulta:
SELECT *
FROM exam
ORDER BY
exam_year DESC,
(CASE exam_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,
exam_day DESC;
Tenga en cuenta que al ordenar en orden descendente en SQLite, NULL s se muestran al final.