Problem:
Du vill sortera raderna efter datum.
Exempel 1:
exam
Tabellen har två kolumner, subject
och exam_date
.
Ämne | ExamDate |
---|---|
Matematik | 2019-12-19 |
Engelska | 2020-01-08 |
Vetenskap | 2020-01-05 |
Hälsa | 2020-01-05 |
Konst | NULL |
Du vill sortera raderna efter exam_date
.
Lösning:
SELECT * FROM Exam ORDER BY ExamDate;
Resultatet ser ut så här (raderna är sorterade i stigande ordning efter ExamDate
):
Ämne | ExamDate |
---|---|
Konst | NULL |
Vetenskap | 2020-01-05 |
Hälsa | 2020-01-05 |
Engelska | 2020-01-08 |
Matematik | 2019-12-19 |
Diskussion:
Använd ORDER BY
nyckelord och namnet på den kolumn som du vill sortera efter. På så sätt kommer du att sortera data i stigande ordning efter den här kolumnen. Du kan också använda ASC
nyckelord för att göra det tydligt att ordningen stiger (det tidigaste datumet visas först, det senaste datumet visas sist, etc.).
SELECT * FROM Exam ORDER BY ExamDate ASC;
Om du vill se det senaste datumet först och det tidigaste datumet sist måste du sortera i fallande ordning. Använd DESC
nyckelord i det här fallet.
SELECT * FROM Exam ORDER BY ExamDate DESC;
Observera att i T-SQL, NULL
s visas först vid sortering i stigande ordning och sist vid sortering i fallande ordning. Dessutom raderna med samma ExamDate
visas i icke-deterministisk ordning (du kan se Science
andra och Health
tredje, eller Health
andra och Science
tredje).
Exempel 2:
exam
Tabellen har följande kolumner:subject
, exam_year
, exam_month
och exam_day
. Månaden anges med namn, inte med nummer.
Ämne | Examenår | Examenmånad | Examendagen |
---|---|---|---|
Matematik | 2019 | December | 19 |
Engelska | 2020 | Januari | 8 |
Vetenskap | 2020 | Januari | 5 |
Hälsa | 2020 | Januari | 5 |
Konst | NULL | NULL | NULL |
Du vill sortera raderna efter undersökningsdatum.
Lösning:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE);
Resultatet ser ut så här (raderna är sorterade i stigande ordning efter ExamYear
, ExamMonth
och ExamDate
):
Ämne | Examenår | Examenmånad | Examendagen |
---|---|---|---|
Konst | NULL | NULL | NULL |
Hälsa | 2020 | Januari | 5 |
Vetenskap | 2020 | Januari | 5 |
Engelska | 2020 | Januari | 8 |
Matematik | 2019 | December | 19 |
Diskussion:
För att gruppera efter datum, skapa datumvärden från år, månad och dagvärden. Använd funktionen CAST() för att göra detta. Om du har ett datum lagrat som en sträng i 'YYYY-Month-DD
' format, kan du casta det till ett datum med CAST(date_string AS date)
. Först måste du skapa en sträng, även med funktionen CAST():
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
Uttrycket CAST(ExamYear AS VARCHAR(4))
skapar en sträng från numret som är lagrat i ExamYear
. Uttrycket CAST(ExamDay AS VARCHAR(2))
skapar en sträng från numret som är lagrat i ExamDay
. ExamMonth
är redan en sträng, så det finns ingen anledning att kasta den.
Sedan måste du casta den här strängen till ett datum med CAST(date_string AS date)
funktion:
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
Använd den med en ORDER BY
sats för att sortera raderna i stigande ordning efter datum. Om du vill se raderna i fallande ordning, lägg bara till en DESC
nyckelord, så här:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;