Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara Memesan berdasarkan Nama Bulan di PostgreSQL atau Oracle

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TO_TIMESTAMP() Fungsi di Oracle

  2. Tampilan Terwujud - Mengidentifikasi penyegaran terakhir

  3. Permintaan pivot Oracle SQL

  4. Siaga Buruk

  5. Oracle Cari semua tabel semua kolom untuk string