Masalah:
Anda ingin mengurutkan baris menurut nomor bulan, nama bulan yang diberikan (Anda ingin Januari ditampilkan terlebih dahulu, Desember terakhir).
Contoh:
birthday
tabel berisi dua kolom:nama dan birthday_month
. Bulan ditulis dengan nama, bukan angka.
nama | bulan_ulang tahun |
---|---|
Ronan Tisha | NULL |
Desember | Januari |
Angie Julia | April |
Narelle Dillan | April |
Purdie Casey | Januari |
Donna Nell | NULL |
Blaze Graeme | Oktober |
Anda ingin mengurutkan baris berdasarkan birthday_month
.
Solusi:
SELECT * FROM birthday ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));
Hasilnya terlihat seperti ini (baris diurutkan dalam urutan menaik berdasarkan birthday_month
):
nama | bulan_ulang tahun |
---|---|
Purdie Casey | Januari |
Angie Julia | April |
Narelle Dillan | April |
Blaze Graeme | Oktober |
Ronan Tisha | Januari |
Desember | NULL |
Donna Nell | NULL |
Diskusi:
Untuk mengurutkan baris menurut bulan mulai dari Januari dan berakhir dengan Desember, Anda perlu mengonversi bulan menjadi angka ('January
' hingga 1, 'February
' ke 2
, dll.). Jika tidak, Anda akan melihat 'December
' sebelum 'January
'. Fungsi TO_DATE(birthday_month, 'Month') mengonversi nama bulan penuh menjadi tanggal dalam '0001-MM-01
' format. Misalnya, Anda mendapatkan '0001-12-01
' untuk bulan Desember.
Anda sekarang dapat menggunakan fungsi EXTRACT(MONTH FROM date) untuk mengekstrak bulan dari nilai tanggal ini. Bulan akan berupa angka antara 1
dan 12
.
Menggabungkan kedua fungsi ini, Anda bisa mendapatkan bulan sebagai angka menggunakan rumus berikut:
EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'))
Letakkan ekspresi ini setelah ORDER BY
untuk mengurutkan baris berdasarkan bulan. Jika Anda ingin melihat bulan terakhir terlebih dahulu, Anda harus mengurutkan dalam urutan menurun. Untuk melakukan ini, Anda perlu menggunakan DESC
kata kunci, seperti ini:
SELECT * FROM birthday ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) DESC;
Perhatikan bahwa di PostgreSQL dan Oracle, NULL
s ditampilkan terakhir saat mengurutkan dalam urutan menaik dan pertama saat mengurutkan dalam urutan menurun. Juga, baris dengan birthday_month
yang sama ditampilkan dalam urutan acak (Anda mungkin melihat Angie Julia
kedua dan Narelle Dillan
ketiga, atau Narelle Dillan
kedua dan Angie Julia
ketiga).