使用日历表填写另一个日期范围内的所有日期

时间:2014-07-14 12:33:10

标签: sql

我在数据库中有两个日期表我正在编写查询。这里有一个dbo.days(日历)表和一个dbo.holidays表。

我需要一个简单的节假日所有独特日期列表,所以我的查询输出应该是这样的:

01-01-2014
01-02-2014
18-04-2014
20-04-2014
26-04-2014
27-04-2014

现在,日历表中包含所有日期,但第二列仅列出是否为工作日(周末和假日之间没有区别)

假期表看起来有点像这样:

Description           DateFrom      DateTo
Holiday description   01-01-2014    01-02-2014
Holiday description   18-04-2014    18-04-2014
Holiday description   20-04-2014    21-04-2014
Holiday description   26-04-2014    26-04-2014

由于此表允许日期范围,因此可以打开一堆蠕虫。我不能只选择所有DateFrom天。实际上,没有假期(荷兰这里)持续时间超过两天,所以只需选择所有DateFroms并添加几个DateTo日期就可以获得我想要的列表。但是如果有人希望有一个月的新年假期,我想看01/01,02 / 01,03 / 01,04 / 01等。 下面的查询检索日期,但似乎没有按照我设想的方式工作。通过SO,我找到了this article,那里列出的最后一个查询在某种程度上适用于我的情况。我无法让它在我的情况下工作。

也许这是一个初学者的错误,但我希望有人能够帮助我。

Select convert(varchar,d.Date, 105) from dbo.Days d
LEFT OUTER JOIN dbo.Holidays H on d.Date = h.DateFrom
where d.Date >= h.DateFrom or d.Date <= h.DateTo

1 个答案:

答案 0 :(得分:1)

我认为这可以做你想做的事情

SELECT convert(varchar,d.Date, 105) FROM dbo.Days d
JOIN dbo.Holidays H ON d.Date BETWEEN h.DateFrom AND h.DateTo