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;
我需要计算一个设定周期在另一个设定周期中包含多少天。我有 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;