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_examen |
|---|---|
| Matemáticas | 2019-12-19 |
| Ciencia | 2020-01-05 |
| Salud | 2020-01-05 |
| Inglés | 2020-01-08 |
| Arte | NULO |
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 PostgreSQL y en 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 exam_date se muestran en orden aleatorio (es posible que vea Science segundo y Health tercero, o Salud 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 |
Desea ordenar las filas por fecha de examen.
Solución:
SELECT * FROM exam ORDER BY exam_year, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')), exam_day;
El resultado se ve así (las filas están ordenadas en orden ascendente por exam_year , exam_month y exam_date ):
| asunto | examen_año | examen_mes | dia_examen |
|---|---|---|---|
| Matemáticas | 2019 | diciembre | 19 |
| Salud | 2020 | enero | 5 |
| Ciencia | 2020 | enero | 5 |
| Inglés | 2020 | enero | 8 |
| Arte | NULO | NULO | NULO |
Discusión:
Debe ordenar las filas por tres valores:el año, el mes y el día, pero para tener el orden correcto, 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(exam_month, 'Month') convierte el nombre completo del mes 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 se devolverá como un número.
Combinando estas dos funciones, puedes obtener el mes como un número usando la siguiente fórmula:
EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))
Para ordenar las filas por fecha, debe ordenar por año, mes y día (en este orden). Si desea ver primero el examen más reciente, deberá ordenar en orden descendente. Para hacer esto, necesita usar un DESC palabra clave después de cada columna en ORDER BY cláusula.
SELECT * FROM exam ORDER BY exam_year DESC, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC, exam_day DESC;