Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zamawiać według daty w PostgreSQL lub Oracle

Problem:

Chcesz posortować wiersze według daty.

Przykład 1:

exam tabela ma dwie kolumny, subject i exam_date .

temat data_egzaminu
Matematyka 2019-12-19
angielski 2020-01-08
Nauka 2020-01-05
Zdrowie 2020-01-05
Sztuka NULL

Chcesz posortować wiersze według exam_date .

Rozwiązanie:

SELECT *
FROM exam
ORDER BY exam_date;

Wynik wygląda tak (wiersze są sortowane w porządku rosnącym według exam_date ):

temat data_egzaminu
Matematyka 2019-12-19
Nauka 2020-01-05
Zdrowie 2020-01-05
angielski 2020-01-08
Sztuka NULL

Dyskusja:

Użyj ORDER BY słowo kluczowe i nazwę kolumny, według której chcesz sortować. W ten sposób posortujesz dane w kolejności rosnącej według tej kolumny. Możesz także użyć ASC słowo kluczowe, aby było jasne, że kolejność rośnie (najwcześniejsza data jest wyświetlana jako pierwsza, najnowsza data jest wyświetlana jako ostatnia itd.).

SELECT *
FROM exam
ORDER BY exam_date ASC;

Jeśli chcesz zobaczyć najnowszą datę jako pierwszą, a najwcześniejszą jako ostatnią, musisz posortować dane w kolejności malejącej. Użyj DESC w tym przypadku słowo kluczowe.

SELECT *
FROM exam
ORDER BY exam_date DESC;

Zauważ, że w PostgreSQL i Oracle NULL s są wyświetlane jako ostatnie przy sortowaniu w porządku rosnącym i jako pierwsze przy sortowaniu w porządku malejącym. Ponadto wiersze z tą samą exam_date są wyświetlane w losowej kolejności (możesz zobaczyć Science drugi i Health po trzecie lub Zdrowie po drugie i Science trzeci).

Przykład 2:

exam tabela ma następujące kolumny:subject , exam_year , exam_month i exam_day . Miesiące podane są w imionach, a nie w liczbach.

temat rok_egzaminacyjny egzamin_miesiąc dzień_egzaminacyjny
Matematyka 2019 grudzień 19
angielski 2020 Styczeń 8
Nauka 2020 Styczeń 5
Zdrowie 2020 Styczeń 5
Sztuka NULL NULL NULL

Chcesz posortować wiersze według daty egzaminu.

Rozwiązanie:

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

Wynik wygląda tak (wiersze są sortowane rosnąco według exam_year , exam_month i exam_date ):

temat rok_egzaminacyjny egzamin_miesiąc dzień_egzaminacyjny
Matematyka 2019 grudzień 19
Zdrowie 2020 Styczeń 5
Nauka 2020 Styczeń 5
angielski 2020 Styczeń 8
Sztuka NULL NULL NULL

Dyskusja:

Musisz uporządkować wiersze według trzech wartości:roku, miesiąca i dnia, ale aby uzyskać prawidłową kolejność, musisz przekonwertować miesiąc na liczbę ('January ' do 1 , 'February ' do 2 itp.). W przeciwnym razie zobaczysz „December ' przed 'January „. Funkcja TO_DATE(exam_month, 'Month') konwertuje pełną nazwę miesiąca na datę w '0001-MM-01 format. Na przykład otrzymasz „0001-12-01 ' na grudzień.

Możesz teraz użyć funkcji EXTRACT(MIESIĄC OD daty), aby wyodrębnić miesiąc z tej wartości daty. Miesiąc zostanie zwrócony jako liczba.

Łącząc te dwie funkcje, możesz otrzymać miesiąc jako liczbę za pomocą następującego wzoru:

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

Aby posortować wiersze według daty, musisz posortować według roku, miesiąca i dnia (w tej kolejności). Jeśli chcesz najpierw zobaczyć najnowszy egzamin, posortuj dane w kolejności malejącej. Aby to zrobić, musisz użyć DESC słowo kluczowe po każdej kolumnie w ORDER BY klauzula.

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TO_DSINTERVAL() Funkcja w Oracle

  2. Dlaczego CONNECT BY LEVEL w tabeli zwraca dodatkowe wiersze?

  3. Domyślny format daty Oracle to RRRR-MM-DD, DLACZEGO?

  4. zwiększaj numer wiersza, gdy zmienia się wartość pola w Oracle

  5. Jak radzić sobie z sekundami przestępnymi w Oracle