Проблем:
Искате да сортирате редовете по дата.
Пример 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;