Masalah:
Anda ingin mengurutkan baris berdasarkan tanggal.
Contoh 1:
exam
tabel memiliki dua kolom, subject
dan exam_date
.
subjek | tanggal_ujian |
---|---|
Matematika | 2019-12-19 |
Bahasa Inggris | 08-01-2020 |
Ilmu | 05-01-2020 |
Kesehatan | 05-01-2020 |
Seni | NULL |
Anda ingin mengurutkan baris berdasarkan exam_date
.
Solusi:
SELECT * FROM exam ORDER BY exam_date;
Hasilnya terlihat seperti ini (baris diurutkan dalam urutan menaik berdasarkan exam_date
):
subjek | tanggal_ujian |
---|---|
Matematika | 2019-12-19 |
Ilmu | 05-01-2020 |
Kesehatan | 05-01-2020 |
Bahasa Inggris | 08-01-2020 |
Seni | NULL |
Diskusi:
Gunakan ORDER BY
kata kunci dan nama kolom yang ingin Anda urutkan. Dengan cara ini, Anda akan mengurutkan data dalam urutan menaik menurut kolom ini. Anda juga dapat menggunakan ASC
kata kunci untuk memperjelas bahwa urutannya naik (tanggal paling awal ditampilkan terlebih dahulu, tanggal terakhir ditampilkan terakhir, dll.).
SELECT * FROM exam ORDER BY exam_date ASC;
Jika Anda ingin melihat tanggal terakhir terlebih dahulu dan tanggal paling awal terakhir, Anda harus mengurutkan dalam urutan menurun. Gunakan DESC
kata kunci dalam hal ini.
SELECT * FROM exam ORDER BY exam_date DESC;
Perhatikan bahwa di PostgreSQL dan di Oracle, NULL
s ditampilkan terakhir saat mengurutkan dalam urutan menaik dan pertama saat mengurutkan dalam urutan menurun. Juga, baris dengan exam_date
yang sama ditampilkan dalam urutan acak (Anda mungkin melihat Science
kedua dan Health
ketiga, atau Kesehatan kedua dan Science
ketiga).
Contoh 2:
exam
tabel memiliki kolom berikut:subject
, exam_year
, exam_month
, dan exam_day
. Bulan ditulis dengan nama, bukan angka.
subjek | tahun_ujian | ujian_bulan | hari_ujian |
---|---|---|---|
Matematika | 2019 | Desember | 19 |
Bahasa Inggris | 2020 | Januari | 8 |
Ilmu | 2020 | Januari | 5 |
Kesehatan | 2020 | Januari | 5 |
Seni | NULL | NULL | NULL |
Anda ingin mengurutkan baris berdasarkan tanggal ujian.
Solusi:
SELECT * FROM exam ORDER BY exam_year, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')), exam_day;
Hasilnya terlihat seperti ini (baris diurutkan dalam urutan menaik berdasarkan exam_year
, exam_month
, dan exam_date
):
subjek | tahun_ujian | ujian_bulan | hari_ujian |
---|---|---|---|
Matematika | 2019 | Desember | 19 |
Kesehatan | 2020 | Januari | 5 |
Ilmu | 2020 | Januari | 5 |
Bahasa Inggris | 2020 | Januari | 8 |
Seni | NULL | NULL | NULL |
Diskusi:
Anda perlu mengurutkan baris dengan tiga nilai:tahun, bulan, dan hari, tetapi untuk mendapatkan urutan yang benar, Anda perlu mengonversi bulan menjadi angka ('January
' ke 1
, 'February
' ke 2
, dll.). Jika tidak, Anda akan melihat 'December
' sebelum 'January
'. Fungsi TO_DATE(exam_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 dikembalikan sebagai angka.
Menggabungkan kedua fungsi ini, Anda bisa mendapatkan bulan sebagai angka menggunakan rumus berikut:
EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))
Untuk mengurutkan baris menurut tanggal, Anda perlu mengurutkan menurut tahun, bulan, dan hari (dalam urutan ini). Jika Anda ingin melihat ujian terbaru terlebih dahulu, Anda harus mengurutkan dalam urutan menurun. Untuk melakukan ini, Anda perlu menggunakan DESC
kata kunci setelah setiap kolom di ORDER BY
klausa.
SELECT * FROM exam ORDER BY exam_year DESC, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC, exam_day DESC;