sql >> Databasteknik >  >> RDS >> Oracle

Antal fredagar mellan två datum

Detta kommer att göra det:

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

Kanske bäst om jag bryter ner det. Funktionen NEXT_DAY returnerar nästa dag som är en (fredag ​​i detta fall) efter datumet.

Så att hitta den första fredagen efter d1 skulle vara:

next_day( d1, 'FRI')

Men om d1 är en fredag ​​som skulle återkomma följande fredag, så vi justerar:

next_day( d1-1, 'FRI')

På samma sätt för att hitta den sista fredagen till och med d2 gör vi:

next_day( d1-7, 'FRI')

Att subtrahera 2:an ger ett antal dagar:0 om de är samma datum, 7 om det är en veckas mellanrum och så vidare:

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

Konvertera till veckor:

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

Slutligen, om de är samma datum får vi 0, men egentligen finns det 1 fredag, och så vidare, så vi lägger till en:

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


  1. SQL VIEW

  2. Fallet med kardinalitetsuppskattningen Red Herring

  3. Ta bort dubbletter av rader i SQL Server

  4. Ladda upp CSV-fil till SQL-server