Différence de date T-SQL pour WeekDays uniquement

J'essaie d'get la différence de date à une date donnée en excluant les jours de la semaine.

Voici ce que j'ai:

SELECT DATEADD (w, -4, GETDATE()) 

Cela renvoie 2013-05-04 19: 01: 53.170 , ce qui signifie qu'il count également les week-ends.

Pareil pour

  SELECT DATEADD (dw, -4, GETDATE()) 

Toute aide serait appréciée.

Merci d'avance.

J'utilise ces fonctions qui returnnent les secondes non week-end entre deux dates:

 CREATE FUNCTION [dbo].[DateDiff_NoWeekends]( @date1 DATETIME, @date2 DATETIME ) RETURNS INT AS BEGIN DECLARE @retValue INT SET @date1 = dbo.__CorrectDate(@date1, 1) SET @date2 = dbo.__CorrectDate(@date2, 0) IF (@date1 >= @date2) SET @retValue = 0 ELSE BEGIN DECLARE @days INT, @weekday INT SET @days = DATEDIFF(d, @date1, @date2) SET @weekday = DATEPART(dw, @date1) - 1 SET @retValue = DATEDIFF(s, @date1, @date2) - 2 * 24 * 3600 * ((@days + @weekday) / 7) END RETURN @retValue END GO CREATE FUNCTION [dbo].[__CorrectDate]( @date DATETIME, @forward INT ) RETURNS DATETIME AS BEGIN IF (DATEPART(dw, @date) > 5) BEGIN IF (@forward = 1) BEGIN SET @date = @date + (8 - DATEPART(dw, @date)) SET @date = DateAdd(Hour, (8 - DatePart(Hour, @date)), @date) END ELSE BEGIN SET @date = @date - (DATEPART(dw, @date)- 5) SET @date = DateAdd(Hour, (18 - DatePart(Hour, @date)), @date) END SET @date = DateAdd(Minute, -DatePart(Minute, @date), @date) SET @date = DateAdd(Second, -DatePart(Second, @date), @date) END RETURN @date END 

Voici une démonstration de sql-fiddle pour tous les jours non week-end en avril (22).

 SELECT [no weekend days in april] = (dbo.DateDiff_NoWeekends('2013-04-01','2013-05-01') / 3600 / 24) 

La requête ci-dessous donne la différence pour les jours de semaine seulement, c'est-à-dire les jours non compris entre deux jours et soustrait le non des jours de week-end,

  DECLARE @StartDate DATETIME, @EndDate DATETIME SELECT @StartDate = '01-July-2008', @EndDate = '30-July-2008' ;WITH DATE (Date1) AS ( SELECT DATEADD(DAY, DATEDIFF(DAY, '19000101', @StartDate), '19000101') UNION ALL SELECT DATEADD(DAY, 1, Date1) FROM DATE WHERE Date1 < @EndDate ) SELECT count(*) - ( SELECT count(*) --CONVERT(VARCHAR(15),d1.DATE1 ,110) as [Working Date], --DATENAME(weekday, d1.Date1) [Working Day] from DATE d1 where (DATENAME(weekday, d1.Date1)) in ('Saturday','Sunday') ) --CONVERT(VARCHAR(15),d1.DATE1 ,110) as [Working Date], --DATENAME(weekday, d1.Date1) [Working Day] from DATE d1 where (DATENAME(weekday, d1.Date1)) not in ('Saturday','Sunday') 

s'il vous plaît laissez-moi savoir pour toutes les clarifications

Peut-être qu'il me manque encore des tests complets, mais cela fonctionne aussi pour moi: prendre la différence en jours et ensuite soustraire 2 jours pour chaque week-end

 DateDiff(d, d1, d2) - 2*DateDiff(wk, d1, d2) 

Pourrait être mis dans une fonction aussi bien