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 ExamDate;
Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle ExamDate
):
Předmět | Datum zkoušky |
---|---|
Umění | NULL |
Věda | 2020-01-05 |
Zdraví | 2020-01-05 |
Angličtina | 2020-01-08 |
Matematika | 19. 12. 2019 |
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 ExamDate 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 ExamDate DESC;
Všimněte si, že v T-SQL NULL
s se zobrazují jako první při vzestupném řazení a jako poslední při sestupném řazení. Také řádky se stejným ExamDate
jsou zobrazeny v nedeterministickém pořadí (můžete vidět Science
druhý a Health
třetí nebo Health
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íc je dán jménem, nikoli číslem.
Předmět | ExamYear | Měsíc zkoušky | Den zkoušky |
---|---|---|---|
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 CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE);
Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle ExamYear
, ExamMonth
a ExamDate
):
Předmět | ExamYear | Měsíc zkoušky | Den zkoušky |
---|---|---|---|
Umění | NULL | NULL | NULL |
Zdraví | 2020 | leden | 5 |
Věda | 2020 | leden | 5 |
Angličtina | 2020 | leden | 8 |
Matematika | 2019 | Prosinec | 19 |
Diskuse:
Chcete-li seskupit podle data, vytvořte hodnoty data z hodnot roku, měsíce a dne. Chcete-li to provést, použijte funkci CAST(). Pokud máte datum uložené jako řetězec v 'YYYY-Month-DD
', můžete jej přenést na datum pomocí CAST(date_string AS date)
. Nejprve musíte vytvořit řetězec, také pomocí funkce CAST():
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
Výraz CAST(ExamYear AS VARCHAR(4))
vytvoří řetězec z čísla uloženého v ExamYear
. Výraz CAST(ExamDay AS VARCHAR(2))
vytvoří řetězec z čísla uloženého v ExamDay
. ExamMonth
je již řetězec, takže jej není třeba přenášet.
Poté musíte tento řetězec přenést na datum pomocí CAST(date_string AS date)
funkce:
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
Použijte jej s ORDER BY
klauzule k řazení řádků vzestupně 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 CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;