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 |
---|---|
Matematika | 19. 12. 2019 |
Věda | 2020-01-05 |
Zdraví | 2020-01-05 |
Angličtina | 2020-01-08 |
Umění | NULL |
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 PostgreSQL a Oracle NULL
s se zobrazují jako poslední při vzestupném řazení a jako první 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
druhý a Health
za třetí nebo Zdraví za druhé a Science
třetí).
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 exam_year, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')), exam_day;
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 |
---|---|---|---|
Matematika | 2019 | Prosinec | 19 |
Zdraví | 2020 | leden | 5 |
Věda | 2020 | leden | 5 |
Angličtina | 2020 | leden | 8 |
Umění | NULL | NULL | NULL |
Diskuse:
Řádky musíte seřadit podle tří hodnot:rok, měsíc a den, ale abyste měli správné pořadí, musíte převést měsíc na číslo ('January
' až 1
, 'February
' až 2
, atd.). V opačném případě byste viděli 'December
' před 'January
'. Funkce TO_DATE(exam_month, 'Month') převede celý název měsíce na datum v '0001-MM-01
' formát. Například získáte '0001-12-01
“ za prosinec.
Nyní můžete pomocí funkce EXTRACT (MONTH FROM date) extrahovat měsíc z této hodnoty data. Měsíc bude vrácen jako číslo.
Kombinací těchto dvou funkcí můžete získat měsíc jako číslo pomocí následujícího vzorce:
EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))
Chcete-li seřadit řádky podle data, musíte je seřadit podle roku, měsíce a dne (v tomto pořadí). Chcete-li jako první zobrazit nejnovější test, budete jej muset seřadit sestupně. Chcete-li to provést, musíte použít DESC
klíčové slovo za každým sloupcem v ORDER BY
doložka.
SELECT * FROM exam ORDER BY exam_year DESC, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC, exam_day DESC;