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 sammefødselsdag_måned
vises i tilfældig rækkefølge (du kan muligvis seAngie Julia
anden ogNarelle Dillan
tredje, ellerNarelle Dillan
anden ogAngie Julia
tredje). For at ændre rækkefølgen til faldende, brugDESC
søgeord efter kolonnen iORDER 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;