--@StartDate 本年度第一天 --@EndDate 本年度最後一天 DECLARE @StartDate DATETIME = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) DECLARE @EndDate DATETIME = DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = OBJECT_ID('tempdb..#tb_work') ) BEGIN DROP TABLE #tb_work END CREATE TABLE #tb_work ( RN INT , WorkDate DATE ,--日期 DeWeek NVARCHAR(10) ,--星期幾 IsWork NVARCHAR(10) --是否上班 ) INSERT INTO #tb_work ( RN , WorkDate , DeWeek ) SELECT ROW_NUMBER() OVER ( ORDER BY CAST(DATEADD(day, number, @StartDate) AS DATE) ) , CAST(DATEADD(day, number, @StartDate) AS DATE) AS dt , DATENAME(WEEKDAY, CAST(DATEADD(day, number, @StartDate) AS DATE)) FROM master.dbo.spt_values WHERE type = 'P' AND number <= DATEDIFF(day, @StartDate, @EndDate) SELECT * FROM #tb_work;
下面根據本身數據庫配置的狀況更新表中的「是否上班」的字段數據庫
例如咱們有個配置表以下:spa
咱們先把配置表裏的節假日信息數據填充到臨時表3d
UPDATE tw WITH(ROWLOCK) SET tw.IsWork = TB.IsShipment FROM #tb_work tw WITH ( ROWLOCK ) INNER JOIN EDI_BaseHoliday tb ON Tw.WorkDate = tb.Holiday
因爲咱們公司除配置表配置的節假日外,週末是休息的,那麼將臨時表中沒更新「是否工做日」的字段進行updatecode
UPDATE #tb_work SET IsWork = ( CASE WHEN DeWeek = '星期六' OR DeWeek = '星期日' THEN 'N' ELSE 'Y' END ) WHERE ISNULL(IsWork, '') = ''
這樣本年度的節假日信息就出來了blog