Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Memesan berdasarkan Nama Bulan di MySQL

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Paginasi menggunakan MySQL LIMIT, OFFSET

  2. Tutorial MySQL – Panduan Pemula Untuk Mempelajari MySQL

  3. Mengumumkan ClusterControl 1.7.5:Pemeliharaan &Dukungan Cluster Tingkat Lanjut untuk PostgreSQL 12 dan MongoDB 4.2

  4. sql bergabung dengan dua tabel

  5. PHP PDOException:SQLSTATE[HY093]:Nomor parameter tidak valid