2014-07-14 171 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

謝謝,您的解決方案正是我一直在尋找的。 –

相關問題