Problema:
Desea ordenar las filas por fecha.
Ejemplo 1:
El exam
la tabla tiene dos columnas, subject
y exam_date
.
Asunto | Fecha del 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 ExamDate;
El resultado se ve así (las filas están ordenadas en orden ascendente por ExamDate
):
Asunto | Fecha del examen |
---|---|
Arte | NULO |
Ciencia | 2020-01-05 |
Salud | 2020-01-05 |
Inglés | 2020-01-08 |
Matemáticas | 2019-12-19 |
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 ExamDate 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 ExamDate DESC;
Tenga en cuenta que en T-SQL, 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 ExamDate
se muestran en un orden no determinista (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
. El mes se da por nombre, no por número.
Asunto | Año del examen | MesExamen | Día del 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 CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE);
El resultado se ve así (las filas están ordenadas en orden ascendente por ExamYear
, ExamMonth
y ExamDate
):
Asunto | Año del examen | MesExamen | Día del examen |
---|---|---|---|
Arte | NULO | NULO | NULO |
Salud | 2020 | enero | 5 |
Ciencia | 2020 | enero | 5 |
Inglés | 2020 | enero | 8 |
Matemáticas | 2019 | diciembre | 19 |
Discusión:
Para agrupar por fecha, cree valores de fecha a partir de los valores de año, mes y día. Para hacer esto, use la función CAST(). Si tiene una fecha almacenada como una cadena en el 'YYYY-Month-DD
', puede convertirlo en una fecha usando CAST(date_string AS date)
. Primero, necesitas crear una cadena, también usando la función CAST():
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
La expresión CAST(ExamYear AS VARCHAR(4))
crea una cadena a partir del número almacenado en ExamYear
. La expresión CAST(ExamDay AS VARCHAR(2))
crea una cadena a partir del número almacenado en ExamDay
. ExamMonth
ya es una cadena, por lo que no es necesario convertirla.
Luego, debe convertir esta cadena a una fecha usando CAST(date_string AS date)
función:
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
Ú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 CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;