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).