Điều này sẽ làm được điều đó:
select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data
Có lẽ tốt nhất là tôi nên phá vỡ điều đó. Hàm NEXT_DAY trả về ngày tiếp theo là ngày (trong trường hợp này là thứ sáu) sau ngày.
Vì vậy, để tìm thứ sáu đầu tiên sau ngày d1 sẽ là:
next_day( d1, 'FRI')
Nhưng nếu d1 là thứ sáu sẽ trả về thứ sáu tiếp theo, vì vậy chúng tôi điều chỉnh:
next_day( d1-1, 'FRI')
Tương tự để tìm thứ sáu cuối cùng cho đến và bao gồm d2, chúng tôi thực hiện:
next_day( d1-7, 'FRI')
Trừ đi 2 sẽ được số ngày:0 nếu trùng ngày, 7 nếu cách nhau một tuần, v.v.:
next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')
Chuyển đổi sang tuần:
(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7
Cuối cùng, nếu chúng trùng ngày thì chúng ta nhận được 0, nhưng thực sự có 1 ngày thứ sáu, v.v., vì vậy chúng ta thêm một ngày:
((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1