Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да получите списък с начална дата на седмицата (понеделник) и крайна дата (неделя) между две дати?

Това ще работи, докато интервалите са 38 години или по-малко. Той ще предложи по-добра производителност и не разчита на локалната настройка на сървъра.

Тази настройка ще накара вашия скрипт да върне грешен резултат:

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

Това означава, че вашата локална настройка в момента противоречи на вашите нужди и кодът ви компенсира.

Ето го сценария. Сценарият е ограничен до 38 години от съображения за ефективност (смятам, че е малко вероятно да имате нужда от по-големи интервали от това). Ще бъде доста лесно да го удължите за повече години.

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)

Резултат:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Къдрави скоби в T-SQL

  2. Как да избягам от единична кавичка в SQL Server?

  3. Как да създадете нова ODBC връзка към един отдалечен SQL Server

  4. SQL Server:експортиране на заявка като .txt файл

  5. SSIS пакетът не иска да извлича метаданни на временна таблица