Problém:
Chcete seřadit řádky podle data.
Příklad 1:
exam
tabulka má dva sloupce, subject
a exam_date
.
předmět | datum_zkoušky |
---|---|
Matematika | 19. 12. 2019 |
Angličtina | 2020-01-08 |
Věda | 2020-01-05 |
Zdraví | 2020-01-05 |
Umění | NULL |
Chcete seřadit řádky podle exam_date
.
Řešení:
SELECT * FROM exam ORDER BY exam_date;
Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle exam_date
):
předmět | datum_zkoušky |
---|---|
Umění | NULL |
Matematika | 19. 12. 2019 |
Věda | 2020-01-05 |
Zdraví | 2020-01-05 |
Angličtina | 2020-01-08 |
Diskuse:
Použijte ORDER BY
klíčové slovo a název sloupce, podle kterého chcete třídit. Tímto způsobem seřadíte data vzestupně podle tohoto sloupce. Můžete také použít ASC
klíčové slovo, aby bylo jasné, že objednávka je vzestupná (nejstarší datum se zobrazí jako první, poslední datum se zobrazí jako poslední atd.).
SELECT * FROM exam ORDER BY exam_date ASC;
Pokud chcete, aby se jako první zobrazilo nejnovější datum a jako poslední se zobrazí nejstarší datum, je třeba seřadit sestupně. Použijte DESC
v tomto případě klíčové slovo.
SELECT * FROM exam ORDER BY exam_date DESC;
Všimněte si, že v MySQL NULL
s se zobrazují jako první při vzestupném řazení a jako poslední při sestupném řazení. Také řádky se stejným exam_date
se zobrazují v náhodném pořadí (můžete vidět Science
třetí a Health
čtvrtý nebo Health
třetí a Science
čtvrtý).
Příklad 2:
exam
tabulka má následující sloupce:subject
, exam_year
, exam_month
a exam_day
. Měsíce jsou uvedeny ve jménech, nikoli v číslech.
předmět | exam_year | exam_month | exam_day |
---|---|---|---|
Matematika | 2019 | Prosinec | 19 |
Angličtina | 2020 | leden | 8 |
Věda | 2020 | leden | 5 |
Zdraví | 2020 | leden | 5 |
Umění | NULL | NULL | NULL |
Chcete seřadit řádky podle data zkoušky.
Řešení:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle exam_year
, exam_month
a exam_date
):
předmět | exam_year | exam_month | exam_day |
---|---|---|---|
Umění | NULL | NULL | NULL |
Matematika | 2019 | Prosinec | 19 |
Zdraví | 2020 | leden | 5 |
Věda | 2020 | leden | 5 |
Angličtina | 2020 | leden | 8 |
Diskuse:
Chcete-li seřadit podle data, vytvořte hodnoty data z hodnot roku, měsíce a dne. Chcete-li to provést, použijte funkci STR_TO_DATE(). Pokud máte datum uložené jako řetězec v 'Year Month Day
', můžete jej přenést na datum pomocí STR_TO_DATE(date_string, '%Y %M %d')
. Nejprve však musíte vytvořit řetězec pomocí funkce CONCAT():
CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
CONCAT()
funkce kombinuje všechny argumenty do jednoho řetězce. Nemusíte přenášet čísla do řetězců. Protože byste chtěli získat řetězec v 'Year Month Day
', argumenty jsou exam_year
, exam_month
, exam_day
a mezery mezi nimi.
Poté musíte tento řetězec převést na datum pomocí STR_TO_DATE(date_string, '%Y %M %d')
funkce. Druhým argumentem této funkce je formát data. %Y
znamená rok, %M
znamená měsíc (jeho celé jméno, nikoli číslo) a %d
znamená den.
STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')
Použijte jej s ORDER BY
klauzule k řazení řádků ve vzestupném pořadí podle data. Pokud chcete řádky zobrazit v sestupném pořadí, stačí připojit DESC
klíčové slovo, například toto:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;