23/09/2008Voici une fonction SQL Server qui permet de convertir une date/heure au format UTC vers le format local français, à savoir +1 h en hiver et +2h en été.
IF OBJECT_ID ('[50005].[DATE_UTC_VERS_LOCAL]') IS NOT NULL
DROP FUNCTION [50005].[DATE_UTC_VERS_LOCAL];
GO
CREATE FUNCTION [50005].[DATE_UTC_VERS_LOCAL]
(
@date_utc DATETIME
)
RETURNS DATETIME
AS
-- ================================================
-- Calcule la date locale à partir de la date UTC
-- =============================================
-- Author: Eric Quillévéré
-- Create date: 23/09/08
-- =============================================
BEGIN
-- Declare variables
DECLARE @date_locale AS DATETIME;
DECLARE @annee AS INTEGER;
DECLARE @mois AS INTEGER;
DECLARE @jour AS INTEGER;
DECLARE @jourSemaine AS INTEGER;
DECLARE @concatDate AS VARCHAR(8); -- Année Mois Jour concaténés
DECLARE @dernDimanche AS DATETIME;
DECLARE @dernDimancheMars AS DATETIME;
DECLARE @dernDimancheOct AS DATETIME;
DECLARE @i AS INTEGER;
-- Si la date est comprise dans la plage de l'heure d'été, on ajoute 2h
-- Sinon, on ajoute une 1h
-- Calcule le dernier dimanche de l'année
SELECT @annee=DATEPART(YEAR, @date_utc);
-- Deux calculs à faire
SET @i=1;
WHILE @i<=2
BEGIN
IF (@i=1)
SET @mois=3 ;
ELSE
SET @mois=10 ;
SET @jour=31;
--SET @concatDate = CAST(@annee AS VARCHAR) + CAST(@mois AS VARCHAR) + CAST(@jour AS VARCHAR) ;
SELECT @dernDimanche = CAST( (CAST(@annee AS VARCHAR) + '/'+ CAST(@mois AS VARCHAR) + '/'+ CAST(@jour AS VARCHAR)) AS DATETIME);
-- Calcule le dernier dimanche
-- Dimanche=1, lundi = 2
SELECT @jourSemaine=DATEPART(weekday, @dernDimanche);
WHILE( @jourSemaine<>1)
BEGIN
SET @jour=@jour-1;
SELECT @dernDimanche = CAST( (CAST(@annee AS VARCHAR) + '/'+ CAST(@mois AS VARCHAR) + '/'+ CAST(@jour AS VARCHAR)) AS DATETIME);
SELECT @jourSemaine=DATEPART(weekday, @dernDimanche);
END
IF (@i=1)
SET @dernDimancheMars=CAST(CAST(@annee AS VARCHAR) + '/'+ CAST(@mois AS VARCHAR) + '/'+ CAST(@jour AS VARCHAR) + ' 02:00:00' AS DATETIME);
ELSE
SET @dernDimancheOct=CAST(CAST(@annee AS VARCHAR) + '/'+ CAST(@mois AS VARCHAR) + '/'+ CAST(@jour AS VARCHAR) + ' 03:00:00' AS DATETIME);
SET @i=@i+1;
END
-- Rajoute une heure ou deux ?
IF (@date_utc>=@dernDimancheMars AND @date_utc<=@dernDimancheOct)
SELECT @date_locale=DATEADD(HOUR, 2, @date_utc);
ELSE
SELECT @date_locale=DATEADD(HOUR, 1, @date_utc);
RETURN @date_locale;
END
GO
Dernière modification le 28/03/2018 - Quillevere.net