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

Jak zamawiać według nazwy miesiąca w PostgreSQL lub Oracle?

Problem:

Chcesz posortować wiersze według numeru miesiąca, podanych nazw miesięcy (chcesz, aby styczeń był wyświetlany jako pierwszy, grudzień jako ostatni).

Przykład:

birthday tabela zawiera dwie kolumny:imię i nazwisko oraz birthday_month . Miesiące podane są w imionach, a nie w liczbach.

nazwa birthday_month
Ronan Tisha NULL
Grudzień Styczeń
Angie Julia Kwiecień
Narelle Dillan Kwiecień
Purdie Casey Styczeń
Donna Nell NULL
Blaze Graeme październik

Chcesz posortować wiersze według birthday_month .

Rozwiązanie:

SELECT *
FROM birthday
ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));

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

nazwa birthday_month
Purdie Casey Styczeń
Angie Julia Kwiecień
Narelle Dillan Kwiecień
Blaze Graeme październik
Ronan Tisza Styczeń
Grudzień NULL
Donna Nell NULL

Dyskusja:

Aby posortować wiersze według miesiąca od stycznia do grudnia, musisz przekonwertować miesiąc na liczbę („January ' do 1, 'February ' do 2 itp.). W przeciwnym razie zobaczysz „December ' przed 'January „. Funkcja TO_DATE(birthday_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 będzie liczbą od 1 i 12 .

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

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

Umieść to wyrażenie po ORDER BY aby posortować wiersze według miesięcy. Jeśli chcesz najpierw zobaczyć ostatni miesiąc, musisz posortować dane w kolejności malejącej. Aby to zrobić, musisz użyć DESC słowo kluczowe, takie jak:

SELECT *
FROM birthday
ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) 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 tym samym birthday_month są wyświetlane w losowej kolejności (możesz zobaczyć Angie Julia drugi i Narelle Dillan trzeci lub Narelle Dillan drugi i Angie Julia trzeci).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wpływ EM SQL Monitor

  2. ORA-00942:Czy można wybrać z schema.table, ale nie z tabeli?

  3. Czy Oracle używa oceny zwarciowej?

  4. Jak wybrać dostawcę Oracle dla aplikacji .Net?

  5. Jeśli oświadczenie w klauzuli Where