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;