Saya mencari untuk melihat apakah mungkin untuk memfilter daftar tanggal akhir kuartal dalam bidang yang berisi tanggal dari tabel.

Di bawah ini adalah kode saya untuk mengambil rentang tanggal tetapi bagaimana saya bisa memodifikasinya untuk mengambil hanya tanggal akhir kuartal? contoh untuk 2017 - Saya ingin itu menunjukkan 2017-03-31,2017-06-31,2017-09-31,2017-12-31.

Terima kasih.

a.activity_date Between To_Date('2017-01-01', 'YYYY-MM-DD') and To_Date(Trunc(SysDate, 'Q') - 1)
0
Kev123w 20 November 2020, 00:18

1 menjawab

Jawaban Terbaik

Saya berpikir:

where activity_date >= date '2017-01-01' 
  and activity_date <  trunc(sysdate, 'q')
  and activity_date = trunc(activity_date, 'q') + interval '3' month - interval '1' day

Dua predikat pertama adalah versi adaptasi dari kueri asli Anda (menggunakan literal tanggal, dan tidak menggunakan to_date() pada apa yang sudah date). Ekspresi yang merupakan operan kanan dari predikat ketiga menghitung akhir kuartal untuk tanggal saat ini: logikanya adalah memotong tanggal awal kuartal itu, tambahkan 3 bulan, lalu kurangi satu hari. Kita dapat menggunakan nilai itu untuk memfilter.

Kami juga dapat mengungkapkan ini dengan aritmatika tanggal Oracle yang dipesan lebih dahulu:

where activity_date >= date '2017-01-01' 
  and activity_date <  trunc(sysdate, 'q')
  and activity_date = add_months(trunc(activity_date, 'q'), 3) - 1
0
GMB 19 November 2020, 21:20