sql >> Databasteknik >  >> RDS >> Mysql

Hur man beställer efter datum i MySQL

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;

  1. Kapslade fönsterfunktioner i SQL

  2. SQL Server Management Studio (SSMS)

  3. PostgreSQL-agent i SQL Standard Committee igen

  4. MySQL hög CPU-användning