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
| CREATE TABLE T_HORAIRES_HRS
(HRS_ID INT,
HRS_DEBUT DATETIME,
HRS_FIN DATETIME)
GO
INSERT INTO T_HORAIRES_HRS VALUES (1, '20050101 11:00:00', '20050101 15:00:00')
INSERT INTO T_HORAIRES_HRS VALUES (1, '20050101 22:00:00', '20050102 02:00:00')
INSERT INTO T_HORAIRES_HRS VALUES (1, '20050101 15:00:00', '20050102 22:00:00')
GO
CREATE FUNCTION F_T_PERIODE (@DEB int, @FIN int)
RETURNS TABLE
AS
RETURN
(SELECT *
FROM T_HORAIRES_HRS
WHERE DATEPART(Hour, HRS_DEBUT) >= @DEB
AND DATEPART(Hour, HRS_DEBUT) <= @FIN
+ CASE
WHEN @FIN < @DEB THEN 24
ELSE 0
END
AND DATEDIFF(HOUR, HRS_DEBUT, HRS_FIN ) <= @FIN - @DEB
+ CASE
WHEN @FIN < @DEB THEN 24
ELSE 0
END)
GO
-- événements entre 7h et 19h
SELECT *
FROM F_T_PERIODE(7, 19)
-- événements entre 20h et 6h
SELECT *
FROM F_T_PERIODE(20, 6) |
Partager