2011-09-16 6 views
1

J'ai une requête où je calcule le nombre total de jours entre deux jours, y compris les dates de début et de fin par la requête SQL suivante. Si la date de fin n'est pas nulle, la date de fin est considérée comme date actuelle.Calcul des jours ouvrables

Cette requête fait le travail. Mais je ne veux pas compter le samedi et le dimanche. Possibles publics Vacances au Royaume-Uni. (Je peux faire une, si je peux obtenir la logique pour le samedi et le dimanche)

SELECT DateDiff(day,DateADD(day,-1,StartDate),ISNULL(EndDate,getDate()))numberOfDays 
     FROM <mytable> 

Comment comptez-je seulement en semaine entre deux dates?

Merci

+0

double possible de [Nombre de jours de travail entre deux dates en T-SQL] (http://stackoverflow.com/questions/252519/count-work-days-between-two- dates-dans-t-sql) –

Répondre

1

essayer cette

SELECT DateDiff(day,DateADD(day,-1,StartDate),ISNULL(EndDate,getDate())) - 
(CASE WHEN DATENAME(dw, StartDate) = 'Sunday' OR 
DATENAME(dw,ISNULL(EndDate,getDate())) = 'Sunday' THEN 1 ELSE 0 END) 
- (CASE WHEN DATENAME(dw, StartDate) = 'Saturday' OR 
    DATENAME(dw,ISNULL(EndDate,getDate())) = 'Saturday' THEN 1 ELSE 0 END) 
numberOfDays   
FROM <mytable> 
+1

Comment cela gère-t-il les vacances? –

4

Je recommande fortement une table de calendrier pour cela, surtout si vous devez prendre des vacances spécifiques en compte. Calculer des Pâques dynamiquement, par exemple, va être une douleur royale.

http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-calendar-table.html

Si vous allez utiliser T-SQL seule, faire attention à l'utilisation des fonctions qui dépendent des paramètres régionaux/langue pour la sortie des choses comme DATENAME ...

2

Jetez un oeil au DATEDIFF MSDN page. Au bas de la page, il y a du contenu généré par l'utilisateur.
Un utilisateur a posté une fonction qui fait exactement ce que vous voulez, y compris les jours fériés (titre: "UDF pour retourner le nombre de jours ouvrables, y compris un chèque à une table de jours fériés").

Questions connexes