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;