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

Sådan bestiller du efter månedsnavn i SQLite

Problem:

Du vil sortere rækkerne efter månedsnummer, givet månedsnavne (du ønsker, at januar skal vises først, december sidste).

Eksempel:

fødselsdagen tabel indeholder to kolonner:navn og fødselsdag_måned . Månederne er angivet i navne, ikke i tal.

navn fødselsdag_måned
Ronan Tisha Januar
December April
Angie Julia April
Narelle Dillan April
Purdie Casey Januar
Donna Nell NULL
Blaze Graeme Oktober

Du vil sortere rækkerne efter fødselsdag_måned .

Løsning:

VÆLG *FRA fødselsdag BESTIL EFTER (SAG fødselsdag_måned 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 'November' SÅ 11 NÅR 'December' SÅ SLUTTER 12);

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

navn fødselsdag_måned
Purdie Casey Januar
Angie Julia April
Narelle Dillan April
Blaze Graeme Oktober
Ronan Tisha Januar
December NULL
Donna Nell NULL

Diskussion:

For at sortere rækkerne efter måned, skal du bruge månederne i tal (ikke navne). Du kan konvertere månedsnavne til numeriske måneder ved at bruge 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 søgeord, og angiv den nye værdi, du vil tildele i stedet for den gamle. Her er kolonnen fødselsdag_måned , de aktuelle værdier i denne kolonne er 'Januar ', 'Februar ', …, '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 fødselsdag_måned 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 'November' SÅ 11. NÅR 'December' SÅ 12. 

Sådan konverterer du et månedsnavn til et månedsnummer. Du kan bruge den til at sortere rækkerne i stigende rækkefølge efter måned – bare brug den i ORDER BY klausul.

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 fødselsdag_måned vises i tilfældig rækkefølge (du kan muligvis se Angie Julia anden og Narelle Dillan tredje, eller Narelle Dillan anden og Angie Julia tredje). For at ændre rækkefølgen til faldende, brug DESC søgeord efter kolonnen i ORDER BY klausul. Sådan skal forespørgslen se ud:

VÆLG *FRA fødselsdag BESTIL EFTER (SAG fødselsdag_måned 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 'November' SÅ 11 NÅR 'December' SÅ SLUT 12) DESC;

  1. Slet tilsluttede brugere i Oracle-databasen

  2. Endnu en 12c Optimizer-hvidbog

  3. Multi-Cloud-implementering til MariaDB-replikering ved hjælp af WireGuard

  4. RAC Sequence Contention