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 |
---|---|
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 MySQL, 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
tercero y Health
cuarto, o Health
tercero y Science
cuarto).
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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
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 |
---|---|---|---|
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 por fecha, cree valores de fecha a partir de los valores de año, mes y día. Para ello, utilice la función STR_TO_DATE(). Si tiene una fecha almacenada como una cadena en el 'Year Month Day
', puede convertirlo en una fecha usando STR_TO_DATE(date_string, '%Y %M %d')
. Pero primero, necesitas crear una cadena usando la función CONCAT():
CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
El CONCAT()
La función combina todos los argumentos en una sola cadena. No necesita convertir números en cadenas. Dado que le gustaría obtener una cadena en el 'Year Month Day
', los argumentos son exam_year
, exam_month
, exam_day
y los espacios entre ellos.
Luego, debe convertir esta cadena en una fecha usando STR_TO_DATE(date_string, '%Y %M %d')
función. El segundo argumento de esta función es el formato de fecha. %Y
significa año, %M
significa mes (su nombre completo, no un número) y %d
significa día.
STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')
Úselo con un ORDER BY
cláusula para ordenar las filas en orden ascendente por fecha. Si desea ver las filas en orden descendente, agregue un DESC
palabra clave, como esta:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;