sql >> Databáze >  >> RDS >> Sqlserver

Jak získat seznam data zahájení týdne (pondělí) a data ukončení (neděle) mezi dvěma daty?

To bude fungovat, pokud budou intervaly 38 let nebo méně. Nabídne lepší výkon a nespoléhá se na místní nastavení serveru.

Toto nastavení způsobí, že váš skript vrátí nesprávný výsledek:

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

To znamená, že vaše místní nastavení je aktuálně v rozporu s vašimi potřebami a váš kód to kompenzuje.

Zde je scénář. Skript je z výkonnostních důvodů omezen na 38 let (považuji za nepravděpodobné, že byste potřebovali větší intervaly). Bude poměrně snadné jej prodloužit na více let.

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)

Výsledek:

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


  1. Převod Json na SQL tabulku

  2. Nástroj pro optimalizaci mysql

  3. MySQL vrací přesnou shodu slov z textového obsahu

  4. Jak funguje DATE_FORMAT() v MariaDB