Exclure les week-ends et jours fériés (c'est à dire les jours Fériés) à partir de la date de calculs
Actuellement, je suis le calcul d'une date de fin basé sur la date de début (DateTime) et durée (nombre de jours), mais mes calculs ne tiennent pas compte des week-ends ou les jours fériés.
Donc, ma solution n'est pas correcte. C'était juste un point de départ.
J'ai lu quelques articles là-bas et on approche consiste à créer un gigantesque calendrier de table qui a tous les week-ends et jours fériés pour les 50 prochaines années. Je suppose que l'idée est d'interroger la plage de date contre le calendrier de table et de soustraire le nombre de week-ends et/ou jours fériés.
Le problème, c'est le logiciel que je suis en train de travailler sur permet aux utilisateurs de définir leurs propres projet de calendrier.
Ne serait pas la table devient trop important pour maintenir étant donné que le logiciel permet aux utilisateurs de gérer de multiples projets?
Donc, je suppose que ma question comment puis-je commencer et quelles sont les approches possibles de ce problème?
En gros, pour chaque tâche d'un projet j'ai besoin de calculer la date de fin de la tâche compte tenu de la date de DÉBUT et la DURÉE, mais en prenant les week-ends et jours fériés(aka jours fériés) en considération.
Des idées?
BTW: je suis à l'aide de SQL Server 2005.
50 jours? Peut-être une faute de frappe? La plupart de calendrier les tableaux devraient avoir les données pour les années.
Éditée depuis quelques jours à des années
OriginalL'auteur Abe | 2009-10-22
Vous devez vous connecter pour publier un commentaire.
C'est parce que certains jours fériés ne pas toujours tomber sur le même jour. La journée de travail par exemple - le premier lundi de septembre. Il est plus facile & prend moins d'espace dans la base de données pour stocker la date, il tombe sur un par la base de l'année que d'essayer de coder les règles de calcul.
D'autres considérations sont les vacances qui atterrissent sur Sat/Sun - c'est un tossup si la journée va tomber sur le lundi ou le vendredi. Et certains jours fériés seront fédéral, tandis que d'autres sont locales...
Pâques n'est pas trop mauvais, parce que vous pouvez trouver une formule pour elle. Le plus gros problème, c'est quand il y a des jours supplémentaires jetés, comme quand le royaume-UNI avait un public supplémentaire de vacances pour les Jubliee en 2002, l'Australie a un supplément de jour férié pour le début des jeux Olympiques de Sydney en 2000. Pour cela, vous avez vraiment besoin d'un tableau listant les jours de congé, ou ont un "IsHoliday" dans un champ agenda.
Ou de penser à des choses comme le Ramadan, qui varie d'une année à l'autre et d'un endroit. Il est également décrété, pas caclulated (bien que la date du décret peut être estimée par le calcul). j.mp/GKzaM
OriginalL'auteur OMG Ponies
Créer un grand calendrier qui contient tous les week-ends et jours fériés pour le reste de la longue période de temps], ont mis à sélectionner uniquement. Puis copiez le besoin de jours dans le calendrier du projet de calendrier à chaque fois qu'un nouveau projet est créé.
OriginalL'auteur David Oneill
Supposons que vous avez une table appelée AllDays, qui a des colonnes appelé theDay et IsPublicHoliday. Supposez aussi que votre @@DATEFIRST est mis à 1, de sorte que vos week-ends sont des jours 1 et 7. Vous voulez trouver la date qui est @n jours de @StartDate.
Si vous n'avez pas une table appelée AllDays, alors vous pouvez facilement utiliser une table de nombres, où theDay est DATEADD(jour,num@StartDate). Vous pourriez faire une JOINTURE GAUCHE de votre liste de inadmissibles jours (qui doit être indexé, bien sûr).
OriginalL'auteur Rob Farley
@Stuart: Oui, 50 jours est un type =P. je voulais dire 50 ans.
@rexem:
C'est vrai. Les calculs seraient trop complexes et sujettes à erreurs.
@David: la Création d'un select-seul maître du calendrier de table et la copie de la date j'ai besoin par projet sonne comme une bonne idée.
(pardon, mon twitter-comme réponse, haha)
Merci pour les excellentes réponses!
Toutes mes excuses. Je vois le bouton commentaire maintenant. Je n'étais pas pleinement conscients de la distinction. merci!
OriginalL'auteur Abe
Salut c'est haw-je le résoudre:
j'ai d'abord créé un calendrier de table (tb_cal) avec deux champs date_day (smalldate), vacances (bit)
alors cette fonction:
vous pouvez appeler cette fonction en passant le paramètre (de, à)
Espère que cette aide
OriginalL'auteur Joabian
Utilisez code ci-dessous pour obtenir la prochaine wrking date après à l'exclusion des week-ends et les jours Fériés
OriginalL'auteur Kundan