sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan får man en liste over ugestartdato (mandag) og slutdato (søndag) mellem to datoer?

Dette vil virke, så længe intervallerne er 38 år eller mindre. Det giver bedre ydeevne, og det er ikke afhængigt af serverens lokale indstillinger.

Denne indstilling vil få dit script til at returnere forkert resultat:

set datefirst 1
select * from dbo.fnGetWeeksBetweenDates('2014-03-21','2014-03-21')

Det betyder, at din lokale indstilling i øjeblikket er i konflikt med dine behov, og din kode kompenserer.

Her er manuskriptet. Scriptet er begrænset til 38 år af præstationsmæssige årsager (jeg finder det usandsynligt, at du har brug for større intervaller end det). Det vil være ret nemt at forlænge det til flere år.

DECLARE @FromDate DATE = '2014-03-21'    
DECLARE @ToDate DATE  = '2014-03-24'    

SELECT @fromdate = dateadd(day, datediff(day, 0, @FromDate)/7*7, 0), 
@todate = dateadd(day, datediff(day, 0, @ToDate)/7*7, 6)

SELECT dateadd(d, number * 7, @fromdate) Start_Week, 
dateadd(d, number * 7 + 6, @fromdate) End_Week
FROM
master..spt_values
WHERE type = 'P' and
@todate >= dateadd(d, number * 7, @fromdate)

Resultat:

Start_Week  End_Week
2014-03-17  2014-03-23
2014-03-24  2014-03-30


  1. 2 måder at liste alle triggere i en PostgreSQL-database

  2. Forskellen mellem INSTR() vs LOCATE() i MariaDB

  3. (Java) Korrekt brug af kommandolinjeudførelse

  4. Brug af DBMS_LOB.SUBSTR på en BLOB resulterer i ORA-06502