Suppression des week-ends d'un résultat SQL

J'ai la requête suivante qui produit un certain nombre de résultats pour moi. L'un d'entre eux est le nombre de jours de chacun des loggings.

J'ai besoin d'un chiffre plus précis maintenant en supprimant les week-ends de l'équation. Je ne sais pas comment procéder et j'ai du mal à comprendre les réponses que j'ai trouvées. Ma requête jusqu'à présent est:

select i.incidentnumber, i.priority, i.status, i.subject, i.actualsystem, t.ownerteam, convert(varchar,i.createddatetime,103)[Created], convert(varchar,i.lastmoddatetime,103)[Modified], datediff(day,i.createddatetime,{fn now()})[Days old], datediff(mi,i.createddatetime,{fn now()})[Minutes old], cast(i.createddatetime i.owner from incident i with (nolock) inner join task t with (nolock) on t.parentlink_recid = i.recid where i.status <> 'Closed' and i.actualsystem <> 'System Administration' --and i.service <> 'Service Request' and t.status in ('Active','Waiting','Accepted') --and t.ownerteam <> 'UK Service Desk' order by --t.ownerteam asc --i.actualsystem asc datediff(day,i.createddatetime,{fn now()}) desc 

J'utilise le gestionnaire de server SQL et l'interrogation d'une database 2005. Je commente au besoin. Les minutes anciennes sont une nouvelle colonne ajoutée aujourd'hui. Quelqu'un peut-il aider?

DATEPART(dw, your_date) vous dira s'il s'agit d'un week-end. Habituellement, 1 signifie samedi et 7 signifie dimanche mais cela peut changer en fonction de la configuration du server. Lisez à propos de la fonction datepart pour comprendre comment cela fonctionne

Si vous voulez calculer le nombre de jours de travail (hors week-end) dans la gamme, l'approche la plus simple serait simplement de prendre en count 2 jours de week-end chaque semaine.
Par exemple:

 SELECT Datediff(D, '2012-01-01', '2012-01-31') / 7 * 5 + Datediff(D, '2012-01-01', '2012-01-31') % 7 WorkDays, Datediff(D, '2012-01-01', '2012-01-31') AllDays 

Pour calculer les heures de travail (y compris les partiels), utilisez la requête suivante:

 SELECT ( T.WORKDAYS - 1 ) * 10 + OPENINGDAYHOURS + CLOSINGDAYHOURS FROM (SELECT Datediff(D, OPEN_DATE, CLOSE_DATE) / 7 * 5 + Datediff(D, OPEN_DATE, CLOSE_DATE) % 7 WorkDays, 18 - Datepart(HOUR, OPEN_DATE) OpeningDayHours, Datepart(HOUR, CLOSE_DATE) - 8 ClosingdayHours, Datediff(D, OPEN_DATE, CLOSE_DATE) AllDays FROM TABLE1)T 

Cette requête suppose des jours ouvrables de 8h00 à 18h00.

L'exemple de travail peut être trouvé ici .

Pour être sûr que vous obtenez des données correctes de DATEPART (dw, GETDATE ()), vous devez utiliser

SET DATEFIRST 1

Il va s'assurer que 1 est lundi et 7 – est dimanche.

Référence: http://msdn.microsoft.com/fr-fr/library/ms181598.aspx