sql 一个时期在另一个给定时期中包含多少天

sql how many days one period contains in other given period

我需要计算一个设定周期在另一个设定周期中包含多少天。我有 table 和

create table #test
(
,project nvarchar(10),
startProjectDate date,
endProjectDate date)

insert into #test values
('EE43213','2021-12-31','2022-01-06') ,
('EE0211213','2022-01-09','2022-03-14'), 
('EE53134','2022-02-18','2022-02-22') 

我有带日期的参数(将来用户输入)

DECLARE @startDate DATE = N'2021-12-16' 
DECLARE @endDate DATE = N'2022-03-02' 

对于我需要计算的每个项目,他们的 运行 时间将在用户选择的时间段内设置多少天,然后 * 这个计数在一些 koeff 上。

我有一个例子,如果整个项目都在参数设置期间,我只是找到两个项目日期之间的 datediff 和*它。

case when (startProjectDate BETWEEN @startDate and @endDate) 
and (endProjectDate BETWEEN @startDate and @endDate)
 then DATEDIFF(day, startProjectDate , endProjectDate) + 1 * coeff else ...

但是,如果他们只是部分设置在此期间,如何找到天数呢?

看来您只需要 DATEDIFF 和一些 CASE 表达式:

DECLARE @StartDate DATE = N'20211216',
        @EndDate DATE = N'20220302';

SELECT project,
       DATEDIFF(DAY, CASE WHEN startProjectDate < @StartDate THEN @StartDate ELSE startProjectDate END, CASE WHEN endProjectDate > @EndDate THEN @EndDate ELSE endProjectDate END) AS DaysInRange,
       DATEDIFF(DAY,startProjectDate, endProjectDate) AS DaysInProject
FROM #test
WHERE startProjectDate <= @EndDate
  AND endProjectDate >= @StartDate;