Voici une petite fonction qui vous donnera les date et heure ainsi que le décalage des heures locale par rapport à l’UTC (Universal Time Coordinate) pour la zone France.
CREATE FUNCTION dbo.F_CHANGEMENT_HEURE (@AN INT)
RETURNS @T TABLE (JOUR DATETIME, SAISON VARCHAR(5), DECALAGE_UTC SMALLINT)
AS
BEGIN
DECLARE @DD DATETIME;
-- passage à l'heure d'été, le dernier dimanche de mars à 1h
SET @DD = CAST(CAST(@AN AS CHAR(4)) + '0331 00:01' AS DATETIME);
WHILE DATEPART(weekday, @DD) <> 7
SET @DD = DATEADD(day, -1, @DD);
INSERT INTO @T VALUES (@DD, 'Hiver', +2);
-- passage à l'heure d'hiver, le dernier dimanche d'octobre à 1h
SET @DD = CAST(CAST(@AN AS CHAR(4)) + '1031 00:01' AS DATETIME);
WHILE DATEPART(weekday, @DD) <> 7
SET @DD = DATEADD(day, -1, @DD);
INSERT INTO @T VALUES (@DD, 'Été', +1);
RETURN;
END
GO
Exemple d’utilisation :
SELECT *
FROM dbo.F_CHANGEMENT_HEURE(2009)
JOUR SAISON DECALAGE_UTC
----------------------- ------ ------------
2009-03-29 00:01:00.000 Hiver 2
2009-10-25 00:01:00.000 Été 1
--------
Frédéric Brouard, SQLpro - ARCHITECTE DE DONNÉES, http://sqlpro.developpez.com/
Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server
www.sqlspot.com : modélisation, conseil, audit, optimisation, tuning, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
Bonjour,
Je viens de voir votre fonction qui est intéressante mais peut-on l’utiliser dans SQL développeur pour SQL oracle ?
J’ai du mal a exécuter la fonction. elle se cré bien mais présente une croix rouge à l’écran.
merci de votre aide. (je débute avec sql oracle)
bne journée