Bien qu'il puisse être possible de faire tout cela en une seule expression, je ne voudrais pas essayer. Trop d'erreurs humaines potentielles (y compris des erreurs de transcription), extrêmement longues et difficiles à déboguer ou à modifier. Au lieu de cela, je le ferais comme une fonction définie par l'utilisateur dans T-SQL, si je devais retourner un ensemble de données avec cela déjà calculé. Si je devais l'afficher ou produire un rapport avec cette information, je considérerais le faire dans le code. Mais une fonction T-SQL définie par l'utilisateur sera la solution la plus flexible, je l'accorde.
Je n'ai pas déjà quelque chose comme ça à la main, donc je vais vous donner un algorithme.
Supposons que nous ayons deux valeurs date-heure, @ Date1 et @ Date2. Nous supposerons que @ Date1 < @ Date2. Nous supposerons également que @ Date1 et @ Date2 sont tous deux les jours ouvrables et pendant les heures de travail.
Si @ Date1 et @ Date2 sont à la même date, renvoyez la différence en secondes entre @ Date1 et @ Date2.
Soit @firstMorning soyez le premier 9 heures après @ Date1. Si @ Date1 est sur 9 heures, alors @firstMorning = @ Date1.
Soit @lastMorning être le dernier 9 heures après @firstMorning et avant @ Date2. (Heure de début de @ Date2, fondamentalement.)
Laissez @workWeeks = nombre de semaines du lundi au vendredi entre @firstMorning et @lastMorning.
Soit @firstWeekDays = Nombre de jours entre @firstMorning + vendredi 9h00 de la même semaine. Si @firstMorning = vendredi 9h00, mis @firstWeekDays à 0.
Soit @lastWeekDays = Nombre de jours entre 9h00 lundi de la semaine dernière et @lastMorning. Si @lastMorning = lundi 9h00, définissez @lastWeekDays à 0.
Laissez @SecondsPerDay = 8,5 * 3600.
retour (@workWeeks * 5 * @SecondsPerDay) + (@firstWeekDays * @SecondsPerDay) + (secondes entre @ Date1 et 17h30 sur @ Date1) + (* @lastWeekDays @SecondsPerDay) + (secondes entre @lastMorning et @ Date2)
Notez que cette logique n'a pas été testée avec du code: si c'était le cas, je vous donnerais le code. :)
Les heures de travail sont-elles réparées? Ne jamais varier? Sont-ils continus (pas de pause déjeuner)? –
Et pour les vacances? –
Les heures de travail sont fixes et dans ce cas, j'ignore les vacances, merci! – FBeveridge