2016-11-30 21 views
1

Я смог показать рабочие дни, кроме будних дней. Но теперь мне нужно знать, как также исключить праздник в банке. Пожалуйста помоги?Как исключить праздничные дни из рабочего дня?

Это мой текущий код:

DECLARE @StartDate DATETIME 
DECLARE @EndDate DATETIME 
SET @StartDate = '2016/01/01' 
SET @EndDate = '2017/01/01' 

SELECT 
    (DATEDIFF(dd, @StartDate, @EndDate) + 1) 
    -(DATEDIFF(wk, @StartDate, @EndDate) * 2) 
    -(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END) 
    -(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END) 
    DECLARE @TotalDays INT,@WorkDays INT 
    SET @TotalDays = (DATEDIFF(dd, @StartDate, @EndDate) +1) 
    print @TotalDays 
+0

Tag СУБД вы используете. (Этот код далек от ANSI SQL.) – jarlh

+2

Считаете ли вы создание таблицы дат, в которой вы можете отметить это как нерабочие дни? https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/ –

+0

Нет, я не могу, вы можете мне помочь, как я могу их создать и исключить их? –

ответ

0

Попробуйте это, я думаю, он должен работать

SELECT COUNT(1) 
    FROM bankholidays 
    WHERE (@Region = 1 and Column1 BETWEEN @StartDate AND @EndDate) 
    or (@Region = 2 and Column2 BETWEEN @StartDate AND @EndDate 
    or (@Region not in (1,2) and Column3 BETWEEN @StartDate AND @EndDate