Probleem:
U wilt de rijen op datum sorteren.
Voorbeeld 1:
Het exam tabel heeft twee kolommen, subject en exam_date .
| Onderwerp | ExamenDatum |
|---|---|
| Wiskunde | 2019-12-19 |
| Engels | 2020-01-08 |
| Wetenschap | 05-01-2020 |
| Gezondheid | 05-01-2020 |
| Kunst | NULL |
U wilt de rijen sorteren op exam_date .
Oplossing:
SELECT * FROM Exam ORDER BY ExamDate;
Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op ExamDate ):
| Onderwerp | ExamenDatum |
|---|---|
| Kunst | NULL |
| Wetenschap | 05-01-2020 |
| Gezondheid | 05-01-2020 |
| Engels | 2020-01-08 |
| Wiskunde | 2019-12-19 |
Discussie:
Gebruik de ORDER BY trefwoord en de naam van de kolom waarop u wilt sorteren. Op deze manier sorteert u de gegevens in oplopende volgorde op deze kolom. U kunt ook de ASC . gebruiken trefwoord om duidelijk te maken dat de volgorde oplopend is (de vroegste datum wordt eerst weergegeven, de laatste datum wordt als laatste weergegeven, enz.).
SELECT * FROM Exam ORDER BY ExamDate ASC;
Als u de laatste datum eerst en de vroegste datum als laatste wilt zien, moet u in aflopende volgorde sorteren. Gebruik de DESC zoekwoord in dit geval.
SELECT * FROM Exam ORDER BY ExamDate DESC;
Merk op dat in T-SQL, NULL s worden als eerste weergegeven bij het sorteren in oplopende volgorde en als laatste bij het sorteren in aflopende volgorde. Ook de rijen met dezelfde ExamDate worden weergegeven in niet-deterministische volgorde (u ziet mogelijk Science tweede en Health derde, of Health tweede en Science derde).
Voorbeeld 2:
Het exam tabel heeft de volgende kolommen:subject , exam_year , exam_month , en exam_day . De maand wordt op naam gegeven, niet op nummer.
| Onderwerp | Examenjaar | ExamMaand | Examendag |
|---|---|---|---|
| Wiskunde | 2019 | december | 19 |
| Engels | 2020 | Januari | 8 |
| Wetenschap | 2020 | Januari | 5 |
| Gezondheid | 2020 | Januari | 5 |
| Kunst | NULL | NULL | NULL |
U wilt de rijen sorteren op examendatum.
Oplossing:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE);
Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op ExamYear , ExamMonth , en ExamDate ):
| Onderwerp | Examenjaar | ExamMaand | Examendag |
|---|---|---|---|
| Kunst | NULL | NULL | NULL |
| Gezondheid | 2020 | Januari | 5 |
| Wetenschap | 2020 | Januari | 5 |
| Engels | 2020 | Januari | 8 |
| Wiskunde | 2019 | december | 19 |
Discussie:
Als u op datum wilt groeperen, maakt u datumwaarden van het jaar, de maand en de dagwaarden. Gebruik hiervoor de functie CAST(). Als je een datum hebt opgeslagen als een string in de 'YYYY-Month-DD ' formaat, kunt u het naar een datum casten met CAST(date_string AS date) . Eerst moet je een string maken, ook met de CAST()-functie:
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
De uitdrukking CAST(ExamYear AS VARCHAR(4)) maakt een string van het nummer dat is opgeslagen in ExamYear . De uitdrukking CAST(ExamDay AS VARCHAR(2)) maakt een string van het nummer dat is opgeslagen in ExamDay . ExamMonth is al een string, dus het is niet nodig om deze te casten.
Vervolgens moet u deze tekenreeks naar een datum casten met behulp van de CAST(date_string AS date) functie:
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
Gebruik het met een ORDER BY om de rijen in oplopende volgorde op datum te sorteren. Als u de rijen in aflopende volgorde wilt zien, voegt u gewoon een DESC . toe zoekwoord, zoals dit:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;