1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
|
CRÉER LA FONCTION [dbo]. [CalcMinutesSLA_TFAM] (
DATE-HEURE de @startTime,
DATE-HEURE de @endTime
)
renvoie l'international
As
commencer
déclarer les @minutes international ;
déclarer la date-heure @startPlus1
déclarer la date-heure @endLess1
-- établir la gamme pour les jours complets dans l'intervalle
choisir @startPlus1 = datediff (d, 0, @startTime+1),
@endLess1 = datediff (d, 0, @endTime-1)
-- vérifier combien de jours de non-week-end existent dans cette gamme
choisir les @minutes = 480 * (converti (international, @endLess1-@startPlus1) /7*5 + compte (*))
du maître. .spt_values
là où type='P et nombre entre 0 et datediff (d,
@startPlus1+convert (international, @endLess1-@startPlus1) /7*7, @endLess1)
et datename (dw, @startPlus1+number) ! = « S »
-- vérifier combien de vacances de non-week-end existent dans cette gamme
choisir les @minutes = les @minutes - le compte (*)
des web_holidays
là où HolidayDate entre @startPlus1 et @endless1
et parti (datename (dw, HolidayDate), 1) ! = « S »
-- ajuster les périodes pour d'abord/derniers jours
si @endTime 17 de datepart (hh, < 9="" set="">@startTime) = = datediff réglés (densité double, 0, @endTime) +17.0/24
si le retour de @endTime de >= de @startTime fusionnent (@minutes, 0) ;
-- si la date de début n'est pas des vacances et pas un week-end, ajouter les minutes
choisir les @minutes = les @minutes +
datediff (MI, @startTime, datediff (densité double, 0, @startTime) +17.0/24)
là où pas existe (
choisir * à partir des web_holidays
là où HolidayDate = datediff (densité double, 0, @startTime))
et parti (datename (dw, @startTime), 1) ! = « S »
-- si la date de fin n'est pas des vacances et pas un week-end, ajouter les minutes
choisir les @minutes = les @minutes +
datediff (MI, datediff (densité double, 0, @endTime) +9.0/24, @endTime)
là où pas existe (
choisir * à partir des web_holidays
là où HolidayDate = datediff (densité double, 0, @endTime))
et parti (datename (dw, @endTime), 1) ! = « S »
-- si le start=end, nous ont compté le jour deux fois, enlever 480
choisir les @minutes = les @minutes - 480
là où pas existe (
choisir * à partir des web_holidays
là où HolidayDate = datediff (densité double, 0, @endTime))
et parti (datename (dw, @endTime), 1) ! = « S »
et datediff (d, @startTime, @endTime) = 0 -- le même jour
retourner fusionnent (@minutes, 0) ;
extrémité
ALLER
|