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
| DECLARE @heure_debut time(0) = '07:15'
, @heure_fin time(0) = '10:00'
, @minute_range_size tinyint = 15
WITH
N AS (SELECT NULL AS v UNION ALL SELECT NULL)
, N0 AS (SELECT A.v FROM N AS A CROSS JOIN N AS B)
, N1 AS (SELECT A.v FROM N0 AS A CROSS JOIN N0 AS B)
, RN AS
(
SELECT ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) - 1 AS rn
FROM N1
)
, HOUR_RANGE AS
(
SELECT DATEADD(minute, rn * @minute_range_size, @heure_debut) AS heure_debut
, DATEADD(minute, @minute_range_size + rn * @minute_range_size, @heure_debut) AS heure_fin
FROM RN
WHERE rn <= (DATEDIFF(minute, @heure_debut, @heure_fin) / @minute_range_size) - 1
)
, HORRENDOUS_STRING_HOUR_RANGE AS
(
SELECT REPLACE(LEFT(CONVERT(varchar, heure_debut, 108), 5), ':', '') AS heure_debut
, REPLACE(LEFT(CONVERT(varchar, heure_fin, 108), 5), ':', '') AS heure_fin
FROM HOUR_RANGE
)
SELECT P.MATRI
, P.CODELIEU
, P.CODEQUAL
, P.DAT
, P.JOUR
, J.NUMSEM
, HR.heure_debut AS HDEB
, HR.heure_fin AS HFIN
FROM dbo.plpacti AS P
LEFT JOIN dbo.hophjoun AS J
ON P.MATRI = J.MATRI
AND P.DAT = J.DAT
INNER JOIN HORRENDOUS_STRING_HOUR_RANGE AS HR
ON HDEB >= HR.heure_debut
AND HFIN <= HR.heure_fin |
Partager