Sql-Server-2008-R2

將範圍內的日期放入表中

  • May 7, 2020

我有一個日曆表,顯示從 01/01/2015 到 12/31/2016 的所有日期,基本上日曆顯示日期和工作日。我需要能夠將 begindate 和 enddate 傳遞給儲存過程,並在表中插入範圍內的所有日期。所以例如像這樣的東西

Create Procedure [dbo].[DateRangeTest]
(
 @begindate date
 ,@enddate date
)
As

Set @begindate = '01/01/2016'
Set @enddate = '01/31/2016'

現在這就是我缺乏知識的地方,我怎樣才能從我的工作日曆表中獲取該範圍內標記為工作日的所有日期並將這些特定日期插入臨時表中?

猜測列名:

INSERT #temp(dateColumn) 
 SELECT dateColumn
 FROM dbo.WorkCalendar
 WHERE IsWorkDay = 1
 AND dateColumn >= @begindate
 AND dateColumn < DATEADD(DAY, 1, @enddate);

另外請盡量避免使用區域格式,例如m/d/y. 這些最終會咬你一口,因為有人會在具有不同語言或區域設置的伺服器上執行你的程式碼,它會被解釋為d/m/y. 請參閱要踢的壞習慣:錯誤處理日期/範圍查詢。另外,有關我為什麼不使用的資訊BETWEEN,請參閱BETWEEN 和魔鬼有什麼共同點?它可能適用於date數據類型,但我寧願保持一致也不願感到驚訝。

引用自:https://dba.stackexchange.com/questions/128638