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

Cara Memesan Berdasarkan Tanggal di PostgreSQL atau Oracle

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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Muat lembar data Excel ke database Oracle

  2. ORA-27154 / ORA-27146

  3. hitung saldo berjalan dalam kueri oracle

  4. Fungsi ROUND(angka) di Oracle

  5. Oracle RAC N+1 Redundansi