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 exam_date;
Wynik wygląda tak (wiersze są sortowane w porządku rosnącym według exam_date
):
temat | data_egzaminu |
---|---|
Sztuka | NULL |
Matematyka | 2019-12-19 |
Nauka | 2020-01-05 |
Zdrowie | 2020-01-05 |
angielski | 2020-01-08 |
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 exam_date ASC;
Jeśli chcesz zobaczyć najnowszą datę jako pierwszą, a najwcześniejszą jako ostatnią, musisz posortować dane w kolejności malejącej. Użyj DESC
w tym przypadku słowo kluczowe.
SELECT * FROM exam ORDER BY exam_date DESC;
Zauważ, że w MySQL 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 tą samą exam_date
są wyświetlane w losowej kolejności (możesz zobaczyć Science
trzeci i Health
czwarty lub Health
trzecia i Science
czwarty).
Przykład 2:
exam
tabela ma następujące kolumny:subject
, exam_year
, exam_month
i exam_day
. Miesiące podane są w imionach, a nie w liczbach.
temat | rok_egzaminacyjny | egzamin_miesiąc | dzień_egzaminacyjny |
---|---|---|---|
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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
Wynik wygląda tak (wiersze są sortowane rosnąco według exam_year
, exam_month
i exam_date
):
temat | rok_egzaminacyjny | egzamin_miesiąc | dzień_egzaminacyjny |
---|---|---|---|
Sztuka | NULL | NULL | NULL |
Matematyka | 2019 | grudzień | 19 |
Zdrowie | 2020 | Styczeń | 5 |
Nauka | 2020 | Styczeń | 5 |
angielski | 2020 | Styczeń | 8 |
Dyskusja:
Aby posortować według dat, utwórz wartości dat na podstawie wartości roku, miesiąca i dnia. Aby to zrobić, użyj funkcji STR_TO_DATE(). Jeśli masz datę zapisaną jako ciąg w 'Year Month Day
', możesz rzutować go na datę za pomocą STR_TO_DATE(date_string, '%Y %M %d')
. Ale najpierw musisz utworzyć ciąg za pomocą funkcji CONCAT():
CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
CONCAT()
funkcja łączy wszystkie argumenty w jeden ciąg. Nie musisz rzucać liczb na ciągi. Ponieważ chcesz uzyskać ciąg w 'Year Month Day
', argumenty to exam_year
, exam_month
, exam_day
i przestrzenie między nimi.
Następnie musisz przekonwertować ten ciąg na datę za pomocą STR_TO_DATE(date_string, '%Y %M %d')
funkcjonować. Drugim argumentem tej funkcji jest format daty. %Y
oznacza rok, %M
oznacza miesiąc (pełna nazwa, a nie numer) i %d
oznacza dzień.
STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')
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:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;