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 53 54 55 56 57 58 59 60 61 62 63 64
| CREATE function [dbo].[toto]( @UTCTime datetime)
returns datetime
as
begin
return DATEADD(MINUTE,dbo.F_HEURE(@UTCTime),@UTCTime)
et F_HEURE retourne ceci :
-DECLARE @AN0 DATETIME;
--SET @AN0 = '20091019';
DECLARE @DD1 DATETIME,@DD2 DATETIME;
DECLARE @AN AS CHAR(4);
SET @AN = CAST(YEAR(@AN0) as CHAR(4)) ;
-- passage à l'heure d'été, le dernier dimanche de mars à 1h
SET @DD1 = CAST(@AN + '0331 02:00' AS DATETIME);
WHILE DATEPART(weekday, @DD1) <> 7
SET @DD1 = DATEADD(day, -1, @DD1);
-- passage à l'heure d'hiver, le dernier dimanche d'octobre à 1h
SET @DD2 = CAST(@AN + '1031 02:00' AS DATETIME);
WHILE DATEPART(weekday, @DD2) <> 7
SET @DD2 = DATEADD(day, -1, @DD2);
--SELECT @AN0 as an0,@DD1 as dd1,DATEDIFF(DAY,@DD1,@AN0) as diff
--SELECT @AN0 as an0,@DD2 as dd2,DATEDIFF(DAY,@DD2,@AN0) as diff
IF DATEDIFF(DAY,@DD1,@AN0)> 0 and DATEDIFF(DAY,@DD2,@AN0)<0
BEGIN
--ETE
RETURN 120
END
ELSE
BEGIN
--HIVER
RETURN 60
END
--INSERT INTO @T VALUES (@AN0);
--INSERT INTO @T VALUES (@DD1);
--INSERT INTO @T VALUES (@DD2);
-- INSERT INTO @T VALUES ('DD1'+CAST(@DD1 as nvarchar));
-- INSERT INTO @T VALUES ('DD2' +CAST(@DD2 as nvarchar));
-- INSERT INTO @T VALUES ('AN0'+CAST(@AN0 as nvarchar));
--INSERT INTO @T VALUES (''+DATEDIFF(day,@AN0,@DD1));
--INSERT INTO @T VALUES (''+DATEDIFF(day,@DD2,@AN0));
RETURN 0;
END
GO |
Partager