Database
 sql >> база данни >  >> RDS >> Database

Как да поръчате по дата в T-SQL

Проблем:

Искате да сортирате редовете по дата.

Пример 1:

exam таблицата има две колони, subject и exam_date .

Тема Дата на изпита
Математика 19.12.2019
английски 08.01.2020
Наука 2020-01-05
Здраве 2020-01-05
Изкуство NULL

Искате да сортирате редовете по exam_date .

Решение:

SELECT *
FROM Exam
ORDER BY ExamDate;

Резултатът изглежда така (редовете са сортирани във възходящ ред по ExamDate ):

Тема Дата на изпита
Изкуство NULL
Наука 2020-01-05
Здраве 2020-01-05
английски 08.01.2020
Математика 19.12.2019

Дискусия:

Използвайте ORDER BY ключова дума и името на колоната, по която искате да сортирате. По този начин ще сортирате данните във възходящ ред по тази колона. Можете също да използвате ASC ключова дума, за да стане ясно, че поръчката е възходяща (най-ранната дата се показва първа, най-новата дата се показва последна и т.н.).

SELECT *
FROM Exam
ORDER BY ExamDate ASC;

Ако искате да видите най-новата дата първа и най-ранната дата последна, трябва да сортирате в низходящ ред. Използвайте DESC ключова дума в този случай.

SELECT *
FROM Exam
ORDER BY ExamDate DESC;

Имайте предвид, че в T-SQL NULL s се показват първи при сортиране във възходящ ред и последни при сортиране в низходящ ред. Също така, редовете със същия ExamDate се показват в недетерминиран ред (може да видите Science второ и Health трето, или Health второ и Science трето).

Пример 2:

exam таблицата има следните колони:subject , exam_year , exam_month и exam_day . Месецът се дава по име, а не по номер.

Тема EamYear Месец на изпит Изпитен ден
Математика 2019 Декември 19
английски 2020 Януари 8
Наука 2020 Януари 5
Здраве 2020 Януари 5
Изкуство NULL NULL NULL

Искате да сортирате редовете по дата на изпита.

Решение:

SELECT *
FROM Exam
ORDER BY CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE);

Резултатът изглежда така (редовете са сортирани във възходящ ред по ExamYear , ExamMonth и ExamDate ):

Тема EamYear Месец на изпит Изпитен ден
Изкуство NULL NULL NULL
Здраве 2020 Януари 5
Наука 2020 Януари 5
английски 2020 Януари 8
Математика 2019 Декември 19

Дискусия:

За да групирате по дата, създайте стойности за дата от стойностите на годината, месеца и деня. За да направите това, използвайте функцията CAST(). Ако имате дата, съхранена като низ в 'YYYY-Month-DD ' формат, можете да го прехвърлите към дата, като използвате CAST(date_string AS date) . Първо, трябва да създадете низ, също като използвате функцията CAST():

CAST(ExamYear AS VARCHAR(4))
+ '-'
+ ExamMonth
+ '-'
+ CAST(ExamDay AS VARCHAR(2))

Изразът CAST(ExamYear AS VARCHAR(4)) създава низ от номера, съхранен в ExamYear . Изразът CAST(ExamDay AS VARCHAR(2)) създава низ от номера, съхранен в ExamDay . ExamMonth е вече низ, така че няма нужда да го прехвърляте.

След това трябва да прехвърлите този низ към дата, като използвате CAST(date_string AS date) функция:

CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE)

Използвайте го с ORDER BY клауза за сортиране на редовете във възходящ ред по дата. Ако искате да видите редовете в низходящ ред, просто добавете DESC ключова дума, като тази:

SELECT *
FROM Exam
ORDER BY CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE) DESC;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Още онлайн операции са налични сега или скоро

  2. Съвети за управление на архивиране за TimescaleDB

  3. Salesforce SOQL от Java

  4. Разширен SQL:КРЪСТО ПРИЛАГАНЕ и ВЪНШНО ПРИЛАГАНЕ

  5. Бъдещето на стека от приложения