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.p>
| nama | bulan_ulang tahun |
|---|---|
| Ronan Tisha | NULL |
| Desember | 2020 |
| 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 STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d');
Hasilnya terlihat seperti ini:
| nama | bulan_ulang tahun |
|---|---|
| Donna Nell | NULL |
| Purdie Casey | Januari |
| Angie Julia | April |
| Narelle Dillan | April |
| Blaze Graeme | Oktober |
| Ronan Tisha | NULL |
| Desember | Oktober |
Diskusi:
Untuk memesan berdasarkan bulan, buat tanggal dengan bulan ini. 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') .
Pertama, Anda perlu membuat string menggunakan fungsi CONCAT(). Tahun dapat berupa tahun apa pun yang Anda inginkan (mis., 0001 ) dan hari dapat berupa hari apa pun yang Anda inginkan (mis., 01 ):
CONCAT('0001 ', birthday_month, ' 01')
CONCAT() fungsi menggabungkan semua argumen menjadi satu string. String harus dalam 'Year Month Day ', jadi argumen kedua harus birthday_month; argumen pertama dan ketiga hanya perlu dalam format yang benar.
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('0001 ', birthday_month, ' 01'), '%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 birthday
ORDER BY STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d') 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 birthday_month yang sama ditampilkan dalam urutan acak (Anda dapat melihat Angie Julia ketiga dan Narelle Dillan keempat, atau Narelle Dillan ketiga dan Angie Julia keempat).