sql >> Databáze >  >> RDS >> SQLite

Jak objednávat podle data v SQLite

Problém:

Chcete seřadit řádky podle data.

Příklad 1:

exam tabulka má dva sloupce, subject a exam_date .

předmět datum_zkoušky
Matematika 19. 12. 2019
Angličtina 2020-01-08
Věda 2020-01-05
Zdraví 2020-01-05
Umění NULL

Chcete seřadit řádky podle exam_date .

Řešení:

SELECT *FROM examORDER BY exam_date;

Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle exam_date ):

Předmět Datum zkoušky
Umění NULL
Matematika 19. 12. 2019
Věda 2020-01-05
Zdraví 2020-01-05
Angličtina 2020-01-08

Diskuse:

Použijte ORDER BY klíčové slovo a název sloupce, podle kterého chcete třídit. Tímto způsobem seřadíte data vzestupně podle tohoto sloupce. Můžete také použít ASC klíčové slovo, aby bylo jasné, že objednávka je vzestupná (nejstarší datum se zobrazí jako první, poslední datum se zobrazí jako poslední atd.).

SELECT *FROM examORDER BY exam_date ASC;

Pokud chcete, aby se jako první zobrazilo nejnovější datum a jako poslední se zobrazí nejstarší datum, je třeba seřadit sestupně. Použijte DESC v tomto případě klíčové slovo.

SELECT *FROM examORDER BY exam_date DESC;

Všimněte si, že v SQLite NULL s se zobrazují jako první při vzestupném řazení a jako poslední při sestupném řazení. Také řádky se stejným exam_date se zobrazují v náhodném pořadí (můžete vidět Science druhý a Health třetí nebo Health druhý a Science třetí).

Příklad 2:

exam tabulka má následující sloupce:subject , exam_year , exam_month a exam_day . Měsíce jsou uvedeny ve jménech, nikoli v číslech.

předmět exam_year exam_month exam_day
Matematika 2019 Prosinec 19
Angličtina 2020 leden 8
Věda 2020 leden 5
Zdraví 2020 leden 5
Umění NULL NULL NULL

Řešení:

SELECT *FROM examORDER BY exam_year, (CASE exam_month WHEN 'leden' TAK 1. KDY 'únor' POTOM 2. KDY 'březen' PAK 3. 'červenec' POTOM 7, KDY 'srpen' POTOM 8, KDY 'září' POTOM 9 KDYŽ 'říjen' POTOM 10 KDYŽ 'listopad' POTOM 11 KDYŽ 'prosinec' POTOM KONEC 12), exam_day;

Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle exam_year , exam_month a exam_day ):

předmět exam_year exam_month exam_day
Umění NULL NULL NULL
Matematika 2019 Prosinec 19
Zdraví 2020 leden 5
Věda 2020 leden 5
Angličtina 2020 leden 8

Diskuse:

Chcete-li seřadit řádky podle data zkoušky, musíte je nejprve seřadit podle roku, poté podle číselného měsíce (nikoli názvu měsíce) a nakonec podle dne. Názvy měsíců můžete převést na číselné měsíce pomocí CASE WHEN doložka. Po CASE klíčové slovo, zadejte název sloupce. Poté po každém KDY uveďte hodnotu v tomto sloupci, použijte klíčové slovo THEN a zadejte novou hodnotu, kterou chcete přiřadit místo staré. Zde je sloupec exam_month , aktuální hodnoty v tomto sloupci jsou 'January ', 'February ', …, 'December ' a nové hodnoty jsou číselné měsíce 1 , 2 , …, 12 . Po dokončení převodu všech hodnot nezapomeňte použít END klíčové slovo pro uzavření CASE WHEN doložka. Podívejte se:

CASE exam_month KDYŽ 'leden' POTOM 1 KDY 'únor' POTOM 2 KDY 'březen' POTOM 3 KDY 'duben' POTOM 4 KDYŽ 'květen' POTOM 5 KDYŽ 'červen' POTOM 6 KDYŽ '7. července' POTOM POTOM 8 KDYŽ 'září' POTOM 9 KDYŽ 'říjen' POTOM 10 KDYŽ 'listopad' POTOM 11 KDYŽ 'prosinec' POTOM 12 END

Takto převedete název měsíce na číslo měsíce. Můžete jej použít při řazení řádků podle data, tedy podle roku, číselného měsíce a dne.

OBJEDNÁVKA DO zkouškového_roku, (CASE exam_month KDYŽ 'leden' POTOM 1 KDY 'únor' POTOM 2 KDY 'březen' POTOM 3 KDYŽ 'duben' POTOM 4 KDYŽ 'květen' POTOM 5 KDY 'červen' PAK 6. ČERVEN' POTOM 7 KDYŽ 'srpen' TAK 8 KDYŽ 'září' POTOM 9 KDYŽ 'říjen' POTOM 10 KDYŽ 'listopad' POTOM 11 KDYŽ 'prosinec' TAK 12 KONEC), exam_day

Tímto způsobem můžete seřadit řádky ve vzestupném pořadí podle data. NULL s se zobrazí jako první. Chcete-li změnit pořadí na sestupné, použijte DESC klíčové slovo za každým sloupcem v ORDER BY doložka. Zde je návod, jak by měl celý dotaz vypadat:

SELECT *FROM examORDER BY exam_year DESC, (CASE exam_month KDYŽ 'leden' TAK 1 KDY 'únor' POTOM 2 KDYŽ 'březen' POTOM 3 KDYŽ 'duben' POTOM 4 KDYŽ 'květen' POTOM 5 KDYŽ '6. červen' KDYŽ 'červenec' TAK 7 KDY 'srpen' THEN 8 KDY 'září' THEN 9 KDY 'říjen' THEN 10 WHEN 'listopad' THEN 11 WHEN 'prosinec' THEN 12 END) DESC, exam_day DESC; 

Všimněte si, že při řazení v sestupném pořadí v SQLite NULL s se zobrazí jako poslední.


  1. mysql automaticky ukládá časové razítko vytvoření záznamu

  2. Jak získat maximální hodnotu celého čísla typu sloupce uloženého jako text typu v tabulce sqlite

  3. Bezplatné metody pro opravu korupce indexu SQL Server

  4. Vkládání dat SQL Serveru do Salesforce.com