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:
|
CREAR LA FUNCIÓN [dbo]. [CalcMinutesSLA_TFAM] (
FECHA Y HORA del @startTime,
FECHA Y HORA del @endTime
)
vuelve la internacional
como
comenzar
declarar los @minutes internacional;
declarar la fecha y hora @startPlus1
declarar la fecha y hora @endLess1
-- resolver la gama para los días enteros mientras tanto
seleccionar @startPlus1 = el datediff (d, 0, @startTime+1),
@endLess1 = datediff (d, 0, @endTime-1)
-- comprobar cuántos días del no-fin de semana existen en esta gama
seleccionar los @minutes = 480 * (convertido (internacional, @endLess1-@startPlus1) /7*5 + la cuenta (*))
del amo. .spt_values
donde type='P y número entre 0 y datediff (d,
@startPlus1+convert (internacional, @endLess1-@startPlus1) /7*7, @endLess1)
¡y datename (dw, @startPlus1+number)! = “S”
-- comprobar cuántos días de fiesta del no-fin de semana existen en esta gama
seleccionar los @minutes = los @minutes - la cuenta (*)
de web_holidays
donde HolidayDate entre @startPlus1 y @endless1
¡e ido (datename (dw, HolidayDate), 1)! = “S”
-- ajustar las épocas para primero/los días pasados
si @endTime 17 del datepart (hh, < 9="" set="">@startTime) = = datediff determinados (DD, 0, @endTime) +17.0/24
si se une la vuelta del @endTime del >= del @startTime (@minutes, 0);
-- si la fecha de inicio no es un día de fiesta y no un fin de semana, agregar los minutos
seleccionar los @minutes = los @minutes +
datediff (MI, @startTime, datediff (DD, 0, @startTime) +17.0/24)
donde no existe (
seleccionar * de web_holidays
donde HolidayDate = datediff (DD, 0, @startTime))
¡e ido (datename (dw, @startTime), 1)! = “S”
-- si la fecha de extremo no es un día de fiesta y no un fin de semana, agregar los minutos
seleccionar los @minutes = los @minutes +
datediff (MI, datediff (DD, 0, @endTime) +9.0/24, @endTime)
donde no existe (
seleccionar * de web_holidays
donde HolidayDate = datediff (DD, 0, @endTime))
¡e ido (datename (dw, @endTime), 1)! = “S”
-- si el start=end, nosotros ha contado el día dos veces, quitar 480
seleccionar los @minutes = los @minutes - 480
donde no existe (
seleccionar * de web_holidays
donde HolidayDate = datediff (DD, 0, @endTime))
¡e ido (datename (dw, @endTime), 1)! = “S”
y datediff (d, @startTime, @endTime) = 0 -- el mismo día
volver se unen (@minutes, 0);
extremo
IR
|