Ich habe einen Firmenkalendertisch mit Indikatoren für Betriebsferien. Ich muss Wochenenden und Feiertage von datediff ausschließen. Unten ist meine vollständige Abfrage.DATEDIFF - Wie man Firmenurlaub ausschließt
Zum Beispiel Alarm Datum 12/23/16 Erstellungsdatum 12/28/16 Firma Ferien 12/26/16
Die folgende Abfrage von 2 Werktagen zeigen soll und nicht 3. Unterhalb dieser Abfrage I Ich werde das Holiday-Stück veröffentlichen, wo ich Probleme habe.
SELECT
A.ALERT_UID,
A.ALERTCREATEDT_MMDDYYYY,
S.CreatedDate,
DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate)
-(DATEDIFF(WK,A.ALERTS_CREATE_DT,S.CreatedDate) * 2)
-(CASE WHEN DATENAME(DW,A.ALERTS_CREATE_DT) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(DW,S.CreatedDate) = 'Saturday' THEN 1 ELSE 0 END) AS BusinessDays
,DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate)
-(DATEDIFF(WK,A.ALERTS_CREATE_DT,S.CreatedDate) * 2) --HOW MANY WEEKEND DAYS PASSED BY
-(CASE WHEN DATENAME(DW,A.ALERTS_CREATE_DT) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(DW,S.CreatedDate) = 'Saturday' THEN 1 ELSE 0 END)
-(CASE WHEN CAL.GRH_HOLIDAY_IND = 'Y' AND CAL.CALENDAR_DATE BETWEEN CAST(A.ALERTS_CREATE_DT AS DATE) AND CAST(S.CreatedDate AS DATE) THEN 1 ELSE 0 END)AS BusinessDays_ExcludingHolidays
FROM A
FULL OUTER JOIN S ON A.id= S.id
INNER JOIN CAL ON A.ALERTCREATEDT_MMDDYYYY = CAL.CALENDAR_DATE
WHERE 1=1
AND S.CreatedDate IS NOT NULL
AND A.ALERT_UID = '2'
Diffculties in der Abfrage unter:
-(CASE WHEN CAL.GRH_HOLIDAY_IND = 'Y' AND CAL.CALENDAR_DATE BETWEEN CAST (A.ALERTS_CREATE_DT AS DATE) AND CAST(S.CreatedDate AS DATE) THEN 1 ELSE 0 END)AS BusinessDays_ExcludingHolidays
Die gleiche Abfrage wurde unter http://stackoverflow.com/questions/42721702/sql-server-2008-exclude-company-holiday-from-datediff/42757086?noredirect=1#comment72686807_42757086 beantwortet –