Problem:
Chcesz posortować wiersze według daty.
Przykład 1:
exam
tabela ma dwie kolumny, subject
i exam_date
.
Temat | Data egzaminu |
---|---|
Matematyka | 2019-12-19 |
angielski | 2020-01-08 |
Nauka | 2020-01-05 |
Zdrowie | 2020-01-05 |
Sztuka | NULL |
Chcesz posortować wiersze według exam_date
.
Rozwiązanie:
SELECT * FROM Exam ORDER BY ExamDate;
Wynik wygląda tak (wiersze są sortowane w porządku rosnącym według ExamDate
):
Temat | Data egzaminu |
---|---|
Sztuka | NULL |
Nauka | 2020-01-05 |
Zdrowie | 2020-01-05 |
angielski | 2020-01-08 |
Matematyka | 2019-12-19 |
Dyskusja:
Użyj ORDER BY
słowo kluczowe i nazwę kolumny, według której chcesz sortować. W ten sposób posortujesz dane w kolejności rosnącej według tej kolumny. Możesz także użyć ASC
słowo kluczowe, aby było jasne, że kolejność rośnie (najwcześniejsza data jest wyświetlana jako pierwsza, najnowsza data jest wyświetlana jako ostatnia itd.).
SELECT * FROM Exam ORDER BY ExamDate ASC;
Jeśli chcesz, aby najnowsza data była widoczna jako pierwsza, a najwcześniejsza jako ostatnia, musisz posortować dane w kolejności malejącej. Użyj DESC
w tym przypadku słowo kluczowe.
SELECT * FROM Exam ORDER BY ExamDate DESC;
Zauważ, że w T-SQL NULL
s są wyświetlane jako pierwsze przy sortowaniu w porządku rosnącym i jako ostatnie przy sortowaniu w porządku malejącym. Ponadto wiersze z tym samym ExamDate
są wyświetlane w niedeterministycznej kolejności (możesz zobaczyć Science
drugi i Health
trzeci lub Health
drugi i Science
trzeci).
Przykład 2:
exam
tabela ma następujące kolumny:subject
, exam_year
, exam_month
i exam_day
. Miesiąc jest podawany według nazwy, a nie numeru.
Temat | Rok egzaminu | Miesiąc egzaminu | Dzień egzaminu |
---|---|---|---|
Matematyka | 2019 | grudzień | 19 |
angielski | 2020 | Styczeń | 8 |
Nauka | 2020 | Styczeń | 5 |
Zdrowie | 2020 | Styczeń | 5 |
Sztuka | NULL | NULL | NULL |
Chcesz posortować wiersze według daty egzaminu.
Rozwiązanie:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE);
Wynik wygląda tak (wiersze są sortowane rosnąco według ExamYear
, ExamMonth
i ExamDate
):
Temat | Rok egzaminu | Miesiąc egzaminu | Dzień egzaminu |
---|---|---|---|
Sztuka | NULL | NULL | NULL |
Zdrowie | 2020 | Styczeń | 5 |
Nauka | 2020 | Styczeń | 5 |
angielski | 2020 | Styczeń | 8 |
Matematyka | 2019 | grudzień | 19 |
Dyskusja:
Aby pogrupować według daty, utwórz wartości dat na podstawie wartości roku, miesiąca i dnia. Aby to zrobić, użyj funkcji CAST(). Jeśli masz datę zapisaną jako ciąg w 'YYYY-Month-DD
', możesz rzutować go na datę za pomocą CAST(date_string AS date)
. Najpierw musisz utworzyć ciąg znaków, również za pomocą funkcji CAST():
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
Wyrażenie CAST(ExamYear AS VARCHAR(4))
tworzy ciąg z liczby przechowywanej w ExamYear
. Wyrażenie CAST(ExamDay AS VARCHAR(2))
tworzy ciąg z liczby przechowywanej w ExamDay
. ExamMonth
jest już ciągiem, więc nie ma potrzeby go rzucać.
Następnie musisz rzutować ten ciąg na datę za pomocą CAST(date_string AS date)
funkcja:
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
Użyj go z ORDER BY
klauzula sortowania wierszy w porządku rosnącym według daty. Jeśli chcesz zobaczyć wiersze w kolejności malejącej, po prostu dołącz DESC
słowo kluczowe, takie jak to:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;