2014-07-14 131 views
0

我正在为数据库中的两个日期表编写查询。有一个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 

由于这TABL e允许日期范围,打开一堆蠕虫。我不能只选择所有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 
+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 
+0

谢谢,您的解决方案正是我一直在寻找的。 –

相关问题