sql >> Database teknologi >  >> RDS >> SQLite

Sådan bestiller du efter dato i SQLite

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:

VÆLG *FRA eksamenORDER BY exam_date;

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

Emne Eksamensdato
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.).

VÆLG *FRA eksamenORDER 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.

VÆLG *FRA eksamenORDER BY exam_date DESC;

Bemærk, at NULL i SQLite 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 sekund og Health tredje eller Health sekund og Science tredje).

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

Løsning:

VÆLG *FRA eksamenORDER BY exam_year, (CASE exam_month NÅR 'Januar' SÅ 1 NÅR 'FEBRUAR' SÅ 2 NÅR 'Marts' SÅ 3 NÅR 'April' SÅ 4 NÅR 'maj' SÅ 5. NÅR 'JUNI' SÅ 6. 'Juli' SÅ 7. NÅR 'August' SÅ 8. NÅR 'September'. SÅ 9. NÅR 

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

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 rækkerne efter eksamensdato skal du først sortere efter år, derefter efter numerisk måned (ikke månedsnavn) og til sidst efter dag. Du kan konvertere månedsnavne til numeriske måneder med en CASE WHEN klausul. Efter CASE søgeord, skal du angive navnet på kolonnen. Derefter, efter hver HVORNÅR, angiv værdien i denne kolonne, brug THEN nøgleordet og angiv den nye værdi, du gerne vil tildele i stedet for den gamle. Her er kolonnen exam_month , de aktuelle værdier i denne kolonne er 'January ', 'February ', …, 'December ', og de nye værdier er de numeriske måneder 1 , 2 , …, 12 . Når du er færdig med at konvertere alle værdierne, skal du huske at bruge END nøgleord for at lukke CASE WHEN klausul. Tag et kig:

CASE exam_month NÅR 'Januar' SÅ 1 NÅR 'Februar' SÅ 2 NÅR 'Marts' SÅ 3 NÅR 'April' SÅ 4 NÅR 'Maj' SÅ 5 NÅR 'Juni' SÅ 6 NÅR 'Juli' SÅ 7. ' SÅ 8. NÅR 'September' SÅ 9. NÅR 'Oktober' SÅ 10. NÅR 'November' SÅ 11. NÅR 'December' SÅ 12. END

Sådan konverterer du et månedsnavn til et månedsnummer. Du kan bruge det, når du sorterer rækkerne efter dato, dvs. efter år, numerisk måned og dag.

ORDER BY exam_year, (CASE exam_month NÅR "januar" SÅ 1 NÅR "Februar" SÅ 2 NÅR "Marts" SÅ 3 NÅR "April" SÅ 4 NÅR "maj" SÅ 5 NÅR "Juni" SÅ 6 NÅR "Juli" SÅ 7. NÅR 'August' SÅ 8. NÅR 'September' SÅ 9. NÅR 'Oktober'. SÅ 10. NÅR 

På denne måde kan du sortere rækkerne i stigende rækkefølge efter dato. NULL s vil blive vist først. For at ændre rækkefølgen til faldende, brug DESC søgeord efter hver kolonne i ORDER BY klausul. Sådan skal hele forespørgslen se ud:

VÆLG *FRA eksamenORDER BY exam_year DESC, (CASE exam_month NÅR 'Januar' SÅ 1. NÅR 'Februar' SÅ 2. NÅR 'Marts' SÅ 3. NÅR 'April' SÅ 4. NÅR 'Maj' SÅ 5. NÅR 'Juni' SÅ NÅR 'JULI' SÅ 7. NÅR 'August' SÅ 8. NÅR 'September' SÅ 9. NÅR 'Oktober' SÅ 10. NÅR 'November' SÅ 11. NÅR 'December' SÅ SLUT 12. DESC, eksamen_dag DESC;

Bemærk, at når du sorterer i faldende rækkefølge i SQLite, NULL s vises sidst.


  1. SQL Server:SLET vs TRUNCATE

  2. Ny MariaDB AX-udgivelse med MariaDB ColumnStore 1.1.3 GA

  3. Udvikling af de nye Microsoft SQL Server ODBC- og OLEDB-drivere

  4. Hvordan skriver man UTF-8-tegn ved hjælp af bulkinsert i SQL Server?