Ini akan melakukannya:
select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data
Mungkin yang terbaik jika saya memecahnya. Fungsi NEXT_DAY mengembalikan hari berikutnya yang merupakan (dalam hal ini Jumat) setelah tanggalnya.
Jadi untuk mencari hari Jumat pertama setelah d1 adalah:
next_day( d1, 'FRI')
Tetapi jika d1 adalah hari Jumat yang akan kembali pada hari Jumat berikutnya, maka kami menyesuaikan:
next_day( d1-1, 'FRI')
Demikian pula untuk menemukan Jumat terakhir hingga dan termasuk d2, kami melakukan:
next_day( d1-7, 'FRI')
Pengurangan 2 menghasilkan jumlah hari:0 jika tanggalnya sama, 7 jika jaraknya seminggu dan seterusnya:
next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')
Konversikan ke minggu:
(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7
Akhirnya, jika tanggalnya sama kita mendapatkan 0, tapi benar-benar ada 1 Jumat, dan seterusnya jadi kita tambahkan satu:
((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1