sql >> Base de Datos >  >> RDS >> Database

Cómo ordenar por fecha en T-SQL

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;