Problem:
Du vill sortera raderna efter datum.
Exempel 1:
exam Tabellen har två kolumner, subject och exam_date .
| ämne | exam_date |
|---|---|
| Matematik | 2019-12-19 |
| Engelska | 2020-01-08 |
| Vetenskap | 2020-01-05 |
| Hälsa | 2020-01-05 |
| Konst | NULL |
Du vill sortera raderna efter exam_date .
Lösning:
SELECT * FROM exam ORDER BY exam_date;
Resultatet ser ut så här (raderna är sorterade i stigande ordning efter exam_date ):
| ämne | exam_date |
|---|---|
| Konst | NULL |
| Matematik | 2019-12-19 |
| Vetenskap | 2020-01-05 |
| Hälsa | 2020-01-05 |
| Engelska | 2020-01-08 |
Diskussion:
Använd ORDER BY nyckelord och namnet på den kolumn som du vill sortera efter. På så sätt kommer du att sortera data i stigande ordning efter den här kolumnen. Du kan också använda ASC nyckelord för att göra det tydligt att ordningen stiger (det tidigaste datumet visas först, det senaste datumet visas sist, etc.).
SELECT * FROM exam ORDER BY exam_date ASC;
Om du vill se det senaste datumet först och det tidigaste datumet sist måste du sortera i fallande ordning. Använd DESC nyckelord i det här fallet.
SELECT * FROM exam ORDER BY exam_date DESC;
Observera att i MySQL, NULL s visas först vid sortering i stigande ordning och sist vid sortering i fallande ordning. Dessutom raderna med samma exam_date visas i slumpmässig ordning (du kan se Science tredje och Health fjärde, eller Health tredje och Science fjärde).
Exempel 2:
exam Tabellen har följande kolumner:subject , exam_year , exam_month och exam_day . Månaderna anges i namn, inte i siffror.
| ämne | examensår | exam_month | exam_day |
|---|---|---|---|
| Matematik | 2019 | December | 19 |
| Engelska | 2020 | Januari | 8 |
| Vetenskap | 2020 | Januari | 5 |
| Hälsa | 2020 | Januari | 5 |
| Konst | NULL | NULL | NULL |
Du vill sortera raderna efter undersökningsdatum.
Lösning:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
Resultatet ser ut så här (raderna är sorterade i stigande ordning efter exam_year , exam_month och exam_date ):
| ämne | examensår | exam_month | exam_day |
|---|---|---|---|
| Konst | NULL | NULL | NULL |
| Matematik | 2019 | December | 19 |
| Hälsa | 2020 | Januari | 5 |
| Vetenskap | 2020 | Januari | 5 |
| Engelska | 2020 | Januari | 8 |
Diskussion:
För att sortera efter datum, skapa datumvärden från år, månad och dagvärden. För att göra detta, använd STR_TO_DATE()-funktionen. Om du har ett datum lagrat som en sträng i 'Year Month Day ' format, kan du casta det till ett datum med STR_TO_DATE(date_string, '%Y %M %d') . Men först måste du skapa en sträng med CONCAT()-funktionen:
CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
CONCAT() funktion kombinerar alla argument till en sträng. Du behöver inte kasta nummer till strängar. Eftersom du vill få en sträng i 'Year Month Day ' format, är argumenten exam_year , exam_month , exam_day , och mellanrummen mellan dem.
Sedan måste du konvertera denna sträng till ett datum med STR_TO_DATE(date_string, '%Y %M %d') fungera. Det andra argumentet för denna funktion är datumformatet. %Y står för år, %M står för månad (dess fullständiga namn, inte ett nummer), och %d står för dag.
STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')
Använd den med en ORDER BY sats för att sortera raderna i stigande ordning efter datum. Om du vill se raderna i fallande ordning, lägg bara till en DESC nyckelord, så här:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;