sql >> Base de Datos >  >> RDS >> Mysql

Cómo ordenar por fecha en MySQL

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;