选择日期不在列表中的两个日期之间的天差
Posted
技术标签:
【中文标题】选择日期不在列表中的两个日期之间的天差【英文标题】:Select difference of days between two dates where date is not in a list 【发布时间】:2013-06-04 07:45:55 【问题描述】:我想选择两个日期(startDate 和 endDate)之间的日期列表,其中日期不会出现在单独的列表中(假期)。
例如我用过的:
select dateadd(day, number, StartDate)
from
(select distinct number from master.dbo.spt_values
where name is null
) n
where dateadd(day, number, StartDate) < EndDate
这给了我两个日期之间的日期列表。但是,我想取出并计算不在假期日期列表中的天数。
谢谢,
第一角
【问题讨论】:
【参考方案1】:试试这个 -
查询 1:
DECLARE
@DateFrom DATETIME
, @DateTo DATETIME
SELECT
@DateFrom = '20130101'
, @DateTo = '20130131'
DECLARE @holidays TABLE ([Date] DATETIME)
INSERT INTO @holidays ([Date])
VALUES ('20130101')
SELECT [Date]
FROM (
SELECT [Date] = DATEADD(DAY, sv.number, t.DateFrom)
FROM (
SELECT
DateFrom = @DateFrom
, diff = DATEDIFF(DAY, @DateFrom, @DateTo)
) t
JOIN [master].dbo.spt_values sv ON sv.number <= diff
WHERE sv.[type] = 'p'
) t2
WHERE t2.[Date] NOT IN (SELECT h.[Date] FROM @holidays h)
查询 2:
SELECT t2.[Date]
FROM (
SELECT [Date] = DATEADD(DAY, sv.number, t.DateFrom)
FROM (
SELECT
DateFrom = @DateFrom
, diff = DATEDIFF(DAY, @DateFrom, @DateTo)
) t
JOIN [master].dbo.spt_values sv ON sv.number <= diff
WHERE sv.[type] = 'p'
) t2
LEFT JOIN @holidays h ON h.[Date] = t2.[Date]
WHERE h.[Date] IS NULL
输出:
Date
-----------------------
2013-01-02 00:00:00.000
2013-01-03 00:00:00.000
2013-01-04 00:00:00.000
2013-01-05 00:00:00.000
2013-01-06 00:00:00.000
2013-01-07 00:00:00.000
2013-01-08 00:00:00.000
...
【讨论】:
感谢这适用于设定的日期,但我需要为具有不同开始和结束日期的多个成员执行此操作?例如带有 ID 列表以及开始和结束日期的单独查询。 请提供您的数据以及开始和结束日期。 好的抱歉忽略最后一条评论。我被我需要的一些额外数据弄糊涂了。感谢您的帮助!以上是关于选择日期不在列表中的两个日期之间的天差的主要内容,如果未能解决你的问题,请参考以下文章