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