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:
|
GENERARE LA FUNZIONE [dbo]. [CalcMinutesSLA_TFAM] (
DATETIME del @startTime,
DATETIME del @endTime
)
restituisce il int
As
cominciare
dichiarare i @minutes int;
dichiarare il datetime @startPlus1
dichiarare il datetime @endLess1
-- risolvere nel fratempo la gamma per i giorni interi
selezionare @startPlus1 = datediff (d, 0, @startTime+1),
@endLess1 = datediff (d, 0, @endTime-1)
-- controllare i quanti giorni di non-fine settimana esistono in questa gamma
selezionare i @minutes = 480 * (convertito (int, @endLess1-@startPlus1) /7*5 + conteggio (*))
dal padrone. .spt_values
dove type='P e numero fra 0 e datediff (d,
@startPlus1+convert (int, @endLess1-@startPlus1) /7*7, @endLess1)
e datename (dw, @startPlus1+number)! = “S„
-- controllare quante feste di non-fine settimana esistono in questa gamma
selezionare i @minutes = i @minutes - conteggio (*)
dai web_holidays
dove HolidayDate fra @startPlus1 e @endless1
ed andato (datename (dw, HolidayDate), 1)! = “S„
-- registrare i periodi per in primo luogo/ultimi giorni
se @endTime 17 del datepart (hh, < 9="" set="">@startTime) = = datediff stabiliti (dd, 0, @endTime) +17.0/24
se il ritorno del @endTime del >= del @startTime si unisce (@minutes, 0);
-- se la data di inizio non è una festa e non un fine settimana, aggiungere i minuti
selezionare i @minutes = i @minutes +
datediff (MI, @startTime, datediff (dd, 0, @startTime) +17.0/24)
dove non esiste (
selezionare * a partire dai web_holidays
dove HolidayDate = datediff (dd, 0, @startTime))
ed andato (datename (dw, @startTime), 1)! = “S„
-- se la data di estremità non è una festa e non un fine settimana, aggiungere i minuti
selezionare i @minutes = i @minutes +
datediff (MI, datediff (dd, 0, @endTime) +9.0/24, @endTime)
dove non esiste (
selezionare * a partire dai web_holidays
dove HolidayDate = datediff (dd, 0, @endTime))
ed andato (datename (dw, @endTime), 1)! = “S„
-- se lo start=end, noi conti due volte il giorno, eliminare 480
selezionare i @minutes = i @minutes - 480
dove non esiste (
selezionare * a partire dai web_holidays
dove HolidayDate = datediff (dd, 0, @endTime))
ed andato (datename (dw, @endTime), 1)! = “S„
e datediff (d, @startTime, @endTime) = 0 -- lo stesso giorno
rinviare si uniscono (@minutes, 0);
estremità
ANDARE
|