Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Anzahl der Freitage zwischen zwei Daten

Dies wird es tun:

select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data

Vielleicht am besten, wenn ich das aufschlüssele. Die NEXT_DAY-Funktion gibt den nächsten Tag zurück, der (in diesem Fall Freitag) nach ist das Datum.

Den ersten Freitag nach d1 zu finden wäre also:

next_day( d1, 'FRI')

Aber wenn d1 ein Freitag ist, der den folgenden Freitag zurückgeben würde, passen wir an:

next_day( d1-1, 'FRI')

Um den letzten Freitag bis einschließlich d2 zu finden, gehen wir ähnlich vor:

next_day( d1-7, 'FRI')

Das Subtrahieren der 2 ergibt eine Anzahl von Tagen:0, wenn es sich um dasselbe Datum handelt, 7, wenn sie eine Woche auseinanderliegen, und so weiter:

next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI') 

In Wochen umrechnen:

(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7

Schließlich, wenn sie das gleiche Datum haben, erhalten wir 0, aber wirklich gibt es 1 Freitag, und so weiter, also fügen wir eins hinzu:

((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1