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 exam_date;
Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op exam_date ):
| onderwerp | examendatum |
|---|---|
| Wiskunde | 2019-12-19 |
| Wetenschap | 05-01-2020 |
| Gezondheid | 05-01-2020 |
| Engels | 2020-01-08 |
| Kunst | NULL |
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 exam_date 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 exam_date DESC;
Merk op dat in PostgreSQL en in Oracle, NULL s worden als laatste weergegeven bij het sorteren in oplopende volgorde en als eerste bij het sorteren in aflopende volgorde. Ook de rijen met dezelfde exam_date worden in willekeurige volgorde weergegeven (u ziet mogelijk Science tweede en Health derde, of Gezondheid tweede en Science derde).
Voorbeeld 2:
Het exam tabel heeft de volgende kolommen:subject , exam_year , exam_month , en exam_day . De maanden worden gegeven in namen, niet in cijfers.
| onderwerp | examenjaar | examen_maand | 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 exam_year, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')), exam_day;
Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op exam_year , exam_month , en exam_date ):
| onderwerp | examenjaar | examen_maand | examendag |
|---|---|---|---|
| Wiskunde | 2019 | december | 19 |
| Gezondheid | 2020 | Januari | 5 |
| Wetenschap | 2020 | Januari | 5 |
| Engels | 2020 | Januari | 8 |
| Kunst | NULL | NULL | NULL |
Discussie:
U moet de rijen rangschikken op drie waarden:het jaar, de maand en de dag, maar om de juiste volgorde te hebben, moet u de maand naar een getal converteren ('January ' naar 1 , 'February ' naar 2 , enzovoort.). Anders zou je 'December . zien ' voor 'January '. De TO_DATE(exam_month, 'Month') functie converteert de naam van de volledige maand naar een datum in de '0001-MM-01 ' formaat. U krijgt bijvoorbeeld '0001-12-01 ' voor december.
U kunt nu de functie EXTRACT(MAAND VANAF datum) gebruiken om de maand uit deze datumwaarde te extraheren. De maand wordt teruggegeven als een getal.
Door deze twee functies te combineren, kunt u de maand als een getal krijgen met behulp van de volgende formule:
EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))
Om de rijen op datum te sorteren, moet u sorteren op jaar, maand en dag (in deze volgorde). Als u eerst het laatste examen wilt zien, moet u in aflopende volgorde sorteren. Om dit te doen, moet je een DESC . gebruiken trefwoord na elke kolom in de ORDER BY clausule.
SELECT * FROM exam ORDER BY exam_year DESC, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC, exam_day DESC;