sql >> Databáze >  >> RDS >> Oracle

Jak objednávat podle data v PostgreSQL nebo Oracle

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 exam
ORDER BY exam_date;

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

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

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 exam
ORDER 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 exam
ORDER BY exam_date DESC;

Všimněte si, že v PostgreSQL a Oracle NULL s se zobrazují jako poslední při vzestupném řazení a jako první 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 za třetí nebo Zdraví za 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

Chcete seřadit řádky podle data zkoušky.

Řešení:

SELECT *
FROM exam
ORDER BY
  exam_year,
  EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')),
  exam_day;

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

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

Diskuse:

Řádky musíte seřadit podle tří hodnot:rok, měsíc a den, ale abyste měli správné pořadí, musíte převést měsíc na číslo ('January ' až 1 , 'February ' až 2 , atd.). V opačném případě byste viděli 'December ' před 'January '. Funkce TO_DATE(exam_month, 'Month') převede celý název měsíce na datum v '0001-MM-01 ' formát. Například získáte '0001-12-01 “ za prosinec.

Nyní můžete pomocí funkce EXTRACT (MONTH FROM date) extrahovat měsíc z této hodnoty data. Měsíc bude vrácen jako číslo.

Kombinací těchto dvou funkcí můžete získat měsíc jako číslo pomocí následujícího vzorce:

EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))

Chcete-li seřadit řádky podle data, musíte je seřadit podle roku, měsíce a dne (v tomto pořadí). Chcete-li jako první zobrazit nejnovější test, budete jej muset seřadit sestupně. Chcete-li to provést, musíte použít DESC klíčové slovo za každým sloupcem v ORDER BY doložka.

SELECT *
FROM exam
ORDER BY
  exam_year DESC,
  EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC,
  exam_day DESC;

  1. SQLSTATE[42000]:Chyba syntaxe nebo porušení přístupu:1064 Máte chybu v syntaxi SQL — PHP — PDO

  2. Tipy pro ukládání záloh TimescaleDB v cloudu

  3. Moje oblíbené PostgreSQL dotazy a proč na nich záleží

  4. Vypočítejte počet záznamů pro každé datum mezi 2 daty