2014-03-31 6 views
1

Я пытаюсь создать приложение для бронирования праздников, и он запускает календарь пользовательского интерфейса JQuery. выбранная звезда и конечная дата передаются на SQL, где он помещает праздник в запрошенную таблицу. единственная проблема заключается в том, что если я ставлю начало и дату окончания, он не учитывает выходные. каждый пользователь системы имеет 21-дневную скидку в течение календарного года, и она также вычитает выходные дни. вот текущий код.Расчеты, исключая выходные

SET @DateDiff = (DATEDIFF(Day,@StartDate,@EndDate) +1) 

Выше дата-дифф заявление и ниже код вставки

BEGIN 
    INSERT INTO Holidays(EmployeeID, StartDate, EndDate, Duration,Status) 
    VALUES(@EmployeeID, @StartDate, @EndDate, @DateDiff,'PE') 

    UPDATE Employees 
    SET AnnualDaysHolidayAllowance = AnnualDaysHolidayAllowance - @DateDiff 
    WHERE ID = @EmployeeID 
    SELECT 'successful' AS result 
END 

Существует больше кода для бизнес-проверок и правил, но это только часть мне нужно, чтобы попытаться исправить. Я относительно новичок в кодировании, поэтому, если возможно, оставьте объяснение, чтобы помочь мне понять исправление, спасибо.

+0

Что RDBS вы используете? – Marboni

+2

Вы * только * должны учитывать выходные, или есть ли «стандартные» праздники в вашем регионе, которые также следует учитывать? Если последнее, это обычно указатель на создание таблицы календаря, которая может содержать информацию о выходных, стандартных отпусках и даже других специальных событиях, характерных для вашей организации. –

+0

RDBS пахнет MS-SQL мне ... –

ответ

1

Нашли решение, которое было размещено по ссылке. источник: Count work days between two dates Ответ (не моя собственная работа)

SET @DateDiff = (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))