sql >> Database teknologi >  >> RDS >> Mysql

Sådan bestiller du efter dato i MySQL

Problem:

Du vil sortere rækkerne efter dato.

Eksempel 1:

exam tabellen har to kolonner, subject og exam_date .

emne eksamen_dato
Matematik 2019-12-19
Engelsk 2020-01-08
Videnskab 2020-01-05
Sundhed 2020-01-05
Kunst NULL

Du vil sortere rækkerne efter exam_date .

Løsning:

SELECT *
FROM exam
ORDER BY exam_date;

Resultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter exam_date ):

emne eksamen_dato
Kunst NULL
Matematik 2019-12-19
Videnskab 2020-01-05
Sundhed 2020-01-05
Engelsk 2020-01-08

Diskussion:

Brug ORDER BY nøgleord og navnet på den kolonne, som du vil sortere efter. På denne måde vil du sortere dataene i stigende rækkefølge efter denne kolonne. Du kan også bruge ASC nøgleord for at gøre det klart, at rækkefølgen er stigende (den tidligste dato vises først, den seneste dato vises sidst osv.).

SELECT *
FROM exam
ORDER BY exam_date ASC;

Hvis du gerne vil se den seneste dato først og den tidligste dato sidst, skal du sortere i faldende rækkefølge. Brug DESC søgeord i dette tilfælde.

SELECT *
FROM exam
ORDER BY exam_date DESC;

Bemærk, at i MySQL, NULL s vises først ved sortering i stigende rækkefølge og sidst ved sortering i faldende rækkefølge. Også rækkerne med den samme exam_date vises i tilfældig rækkefølge (du kan muligvis se Science tredje og Health fjerde eller Health tredje og Science fjerde).

Eksempel 2:

exam tabellen har følgende kolonner:subject , exam_year , exam_month og exam_day . Månederne er angivet i navne, ikke i tal.

emne eksamen_år eksamen_måned eksamensdag
Matematik 2019 December 19
Engelsk 2020 Januar 8
Videnskab 2020 Januar 5
Sundhed 2020 Januar 5
Kunst NULL NULL NULL

Du vil sortere rækkerne efter eksamensdato.

Løsning:

SELECT *
FROM exam
ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');

Resultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter exam_year , exam_month og exam_date ):

emne eksamen_år eksamen_måned eksamensdag
Kunst NULL NULL NULL
Matematik 2019 December 19
Sundhed 2020 Januar 5
Videnskab 2020 Januar 5
Engelsk 2020 Januar 8

Diskussion:

For at sortere efter dato skal du oprette datoværdier fra år, måned og dagværdier. For at gøre dette skal du bruge STR_TO_DATE()-funktionen. Hvis du har en dato gemt som en streng i 'Year Month Day ' format, kan du caste det til en dato ved hjælp af STR_TO_DATE(date_string, '%Y %M %d') . Men først skal du oprette en streng ved hjælp af CONCAT()-funktionen:

CONCAT(exam_year, ' ', exam_month, ' ', exam_day)

CONCAT() funktion kombinerer alle argumenterne i én streng. Du behøver ikke at kaste tal til strenge. Da du gerne vil have en streng i 'Year Month Day ' format, er argumenterne exam_year , exam_month , exam_day , og mellemrummene mellem dem.

Derefter skal du konvertere denne streng til en dato ved hjælp af STR_TO_DATE(date_string, '%Y %M %d') fungere. Det andet argument for denne funktion er datoformatet. %Y står for år, %M står for måned (dets fulde navn, ikke et tal) og %d står for dag.

STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')

Brug den med en ORDER BY klausul for at sortere rækkerne i stigende rækkefølge efter dato. Hvis du gerne vil se rækkerne i faldende rækkefølge, skal du blot tilføje en DESC søgeord som dette:

SELECT *
FROM exam
ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;

  1. java.sql.SQLEundtagelse:ORA-03115:ikke-understøttet netværksdatatype eller repræsentation

  2. SQLite introducerer UNIXEPOCH()-funktionen

  3. Flytning af SQL Server-databaser til skyen

  4. jQuery UI Sorterbar, og skriv derefter rækkefølge i en database