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 |
---|---|
Kunst | NULL |
Wiskunde | 2019-12-19 |
Wetenschap | 05-01-2020 |
Gezondheid | 05-01-2020 |
Engels | 2020-01-08 |
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 MySQL, 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 exam_date
worden in willekeurige volgorde weergegeven (u ziet mogelijk Science
derde en Health
vierde, of Health
derde en Science
vierde).
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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
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 |
---|---|---|---|
Kunst | NULL | NULL | NULL |
Wiskunde | 2019 | december | 19 |
Gezondheid | 2020 | Januari | 5 |
Wetenschap | 2020 | Januari | 5 |
Engels | 2020 | Januari | 8 |
Discussie:
Als u op datum wilt sorteren, maakt u datumwaarden van het jaar, de maand en de dagwaarden. Gebruik hiervoor de functie STR_TO_DATE(). Als u een datum hebt opgeslagen als een tekenreeks in de 'Year Month Day
' formaat, kunt u het naar een datum casten met STR_TO_DATE(date_string, '%Y %M %d')
. Maar eerst moet je een string maken met behulp van de CONCAT()-functie:
CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
De CONCAT()
functie combineert alle argumenten in één string. U hoeft geen getallen naar strings te casten. Omdat je een string wilt krijgen in de 'Year Month Day
' formaat, de argumenten zijn exam_year
, exam_month
, exam_day
, en de spaties ertussen.
Vervolgens moet u deze tekenreeks converteren naar een datum met behulp van de STR_TO_DATE(date_string, '%Y %M %d')
functie. Het tweede argument van deze functie is het datumformaat. %Y
staat voor jaar, %M
staat voor maand (de volledige naam, geen nummer), en %d
staat voor dag.
STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')
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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;