Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zamawiać według daty w MySQL

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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak odjąć godziny od daty i godziny w MySQL?

  2. Używanie mysql concat() w klauzuli WHERE?

  3. Problemy z typem treści podczas ładowania urządzenia w Django

  4. Kategorie rekurencyjne z jednym zapytaniem?

  5. Używanie Pythona i MySQL w procesie ETL:Używanie Pythona i SQLAlchemy