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 |
---|---|
Seni | NULL |
Matematika | 2019-12-19 |
Ilmu | 05-01-2020 |
Kesehatan | 05-01-2020 |
Bahasa Inggris | 08-01-2020 |
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 MySQL, NULL
s ditampilkan pertama kali saat mengurutkan dalam urutan menaik dan terakhir saat mengurutkan dalam urutan menurun. Juga, baris dengan exam_date
yang sama ditampilkan dalam urutan acak (Anda mungkin melihat Science
ketiga dan Health
keempat, atau Health
ketiga dan Science
keempat).
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 menurut tanggal ujian.
Solusi:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
Hasilnya terlihat seperti ini (baris diurutkan dalam urutan menaik berdasarkan exam_year
, exam_month
, dan exam_date
):
subjek | tahun_ujian | ujian_bulan | hari_ujian |
---|---|---|---|
Seni | NULL | NULL | NULL |
Matematika | 2019 | Desember | 19 |
Kesehatan | 2020 | Januari | 5 |
Ilmu | 2020 | Januari | 5 |
Bahasa Inggris | 2020 | Januari | 8 |
Diskusi:
Untuk mengurutkan menurut tanggal, buat nilai tanggal dari tahun, bulan, dan nilai hari. Untuk melakukannya, gunakan fungsi STR_TO_DATE(). Jika Anda memiliki tanggal yang disimpan sebagai string di 'Year Month Day
', Anda dapat memasukkannya ke tanggal menggunakan STR_TO_DATE(date_string, '%Y %M %d')
. Tapi pertama-tama, Anda perlu membuat string menggunakan fungsi CONCAT():
CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
CONCAT()
fungsi menggabungkan semua argumen menjadi satu string. Anda tidak perlu memasukkan angka ke string. Karena Anda ingin mendapatkan string di 'Year Month Day
', argumennya adalah exam_year
, exam_month
, exam_day
, dan spasi di antaranya.
Kemudian, Anda perlu mengubah string ini menjadi tanggal menggunakan STR_TO_DATE(date_string, '%Y %M %d')
fungsi. Argumen kedua dari fungsi ini adalah format tanggal. %Y
singkatan dari tahun, %M
singkatan dari bulan (nama lengkapnya, bukan angka), dan %d
singkatan dari hari.
STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')
Gunakan dengan ORDER BY
klausa untuk mengurutkan baris dalam urutan menaik berdasarkan tanggal. Jika Anda ingin melihat baris dalam urutan menurun, cukup tambahkan DESC
kata kunci, seperti ini:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;