/****** Objet : fonction définie par l'utilisateur dbo.FN_AUTUMN_DATE Date du script : 15/07/2004 16:06:23 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FN_AUTUMN_DATE]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[FN_AUTUMN_DATE] GO /****** Objet : fonction définie par l'utilisateur dbo.FN_SPRING_DATE Date du script : 15/07/2004 16:06:23 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FN_SPRING_DATE]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[FN_SPRING_DATE] GO /****** Objet : fonction définie par l'utilisateur dbo.FN_SUB_SEASONS Date du script : 15/07/2004 16:06:23 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FN_SUB_SEASONS]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[FN_SUB_SEASONS] GO /****** Objet : fonction définie par l'utilisateur dbo.FN_SUMMER_DATE Date du script : 15/07/2004 16:06:23 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FN_SUMMER_DATE]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[FN_SUMMER_DATE] GO /****** Objet : fonction définie par l'utilisateur dbo.FN_WINTER_DATE Date du script : 15/07/2004 16:06:23 ******/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FN_WINTER_DATE]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[FN_WINTER_DATE] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO /****** Objet : fonction définie par l'utilisateur dbo.FN_AUTUMN_DATE Date du script : 15/07/2004 16:06:23 ******/ CREATE FUNCTION FN_AUTUMN_DATE (@Y INT) RETURNS DATETIME AS -- calcul de la date de début d'automne BEGIN -- @Y est l'année considérée -- effets de bord : année absente IF @Y IS NULL RETURN NULL -- limites de calculs de l'an 1000 à l'an 3000 IF NOT @Y BETWEEN 1000 AND 3000 RETURN NULL DECLARE @M FLOAT(50) DECLARE @JDME FLOAT(50) SET @M = (CAST(@Y AS FLOAT(50)) - 2000.0) / 1000.0 SET @JDME = 2451810.21715 + 365242.01767 * @M - 0.11575 * SQUARE(@M) + 0.00337 * POWER (@M, 3) + 0.00078 * POWER (@M, 4) RETURN dbo.FN_SUB_SEASONS (@JDME) END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO /****** Objet : fonction définie par l'utilisateur dbo.FN_SPRING_DATE Date du script : 15/07/2004 16:06:23 ******/ CREATE FUNCTION FN_SPRING_DATE (@Y INT) RETURNS DATETIME AS -- calcul de la date de début du printemps BEGIN -- @Y est l'année considérée -- effets de bord : année absente IF @Y IS NULL RETURN NULL -- limites de calculs de l'an 1000 à l'an 3000 IF NOT @Y BETWEEN 1000 AND 3000 RETURN NULL DECLARE @M FLOAT(50) DECLARE @JDME FLOAT(50) DECLARE @T FLOAT(50) DECLARE @S FLOAT(50) DECLARE @W FLOAT(50) DECLARE @L FLOAT(50) DECLARE @JD FLOAT(50) DECLARE @D DATETIME SET @M = (CAST(@Y AS FLOAT(50)) - 2000.0) / 1000.0 SET @JDME = 2451623.80984 + 365242.37404 * @M + 0.05169 * SQUARE(@M) - 0.00411 * POWER (@M, 3) - 0.00057 * POWER (@M, 4) RETURN dbo.FN_SUB_SEASONS (@JDME) END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO /****** Objet : fonction définie par l'utilisateur dbo.FN_SUB_SEASONS Date du script : 15/07/2004 16:06:23 ******/ /************************************************************ CALCUL DES SAISONS - basé sur l'algorithmes de Meeus ("Astronomical Algorithms", 1991) modifié par Simon Cassidy ------------------------------------------------------------- Frédéric BROUARD - SQLpro - 2004-06-27 - Transact SQL ************************************************************/ CREATE FUNCTION FN_SUB_SEASONS (@JDME FLOAT(50)) RETURNS DATETIME AS -- sous fonction utilisée par les 4 calculs de saisons BEGIN IF @JDME IS NULL RETURN NULL DECLARE @T FLOAT(50) DECLARE @S FLOAT(50) DECLARE @W FLOAT(50) DECLARE @L FLOAT(50) DECLARE @JD FLOAT(50) DECLARE @D DATETIME SET @T = (@JDME - 2451545.0) / 36525 SET @S = 485 * COS(0.43563418129778464 + 33.757041381353048 * @T) + 203 * COS(0.64978608051748876 + 575.33848531501758 * @T) + 199 * COS(0.73443454923921381 + 0.35231216280757538 * @T) + 182 * COS(0.48607419668042079 + 7771.3771552463541 * @T) + 156 * COS(1.2765338149086527 + 786.04194554533876 * @T) + 136 * COS(1.2482594810263443 + 393.02097277266938 * @T) + 77 * COS(0.39339721339952183 + 1150.6769706300352 * @T) + 74 * COS(1.6880824525289155 + 52.969102188531025 * @T) + 70 * COS(0.76061448801912879 + 157.7343580417903 * @T) + 58 * COS(0.34574972482007665 + 588.4926828214484 * @T) + 52 * COS(1.69593643416289 + 2.6298272103200158 * @T) + 50 * COS(0.366868208769208 + 39.81490468210017 * @T) + 45 * COS(0.82972952639810416 + 522.36940057977904 * @T) + 44 * COS(0.43895030687657388 + 550.75533081445974 * @T) + 29 * COS(1.063429113240145 + 77.552256689088878 * @T) + 18 * COS(0.96202548369927443 + 1179.0629008647159 * @T) + 17 * COS(1.5496778428457652 + 79.629809364200341 * @T) + 16 * COS(1.7111207986552408 + 1097.7078858947966 * @T) + 14 * COS(1.7411404617895434 + 548.67777813934822 * @T) + 12 * COS(1.6648695734773908 + 254.43144545527034 * @T) + 12 * COS(1.5203563114122605 + 557.31427814345443 * @T) + 12 * COS(0.36320301734001997 + 606.97767436883066 * @T) + 9 * COS(0.48397980157802756 + 21.32991313471798 * @T) + 8 * COS(0.2696533694331239 + 294.24635013737048 * @T) SET @W = ( 35999.373*@T - 2.47 ) * PI() / 180 SET @L = 1 + 0.0334*COS(@W) + 0.0007*COS(2*@W) SET @JD = @JDME + (0.00001*@S/@L) SET @JD = @JD - 2415020.50208142228 SET @D = CAST(FLOOR(@JD) AS DATETIME) RETURN @D END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO /****** Objet : fonction définie par l'utilisateur dbo.FN_SUMMER_DATE Date du script : 15/07/2004 16:06:23 ******/ CREATE FUNCTION FN_SUMMER_DATE (@Y INT) RETURNS DATETIME AS -- calcul de la date de début de l'été BEGIN -- @Y est l'année considérée -- effets de bord : année absente IF @Y IS NULL RETURN NULL -- limites de calculs de l'an 1000 à l'an 3000 IF NOT @Y BETWEEN 1000 AND 3000 RETURN NULL DECLARE @M FLOAT(50) DECLARE @JDME FLOAT(50) SET @M = (CAST(@Y AS FLOAT(50)) - 2000.0) / 1000.0 SET @JDME = 2451716.56767 + 365241.62603 * @M + 0.00325 * SQUARE(@M) + 0.00888 * POWER (@M, 3) - 0.00030 * POWER (@M, 4) RETURN dbo.FN_SUB_SEASONS (@JDME) END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO /****** Objet : fonction définie par l'utilisateur dbo.FN_WINTER_DATE Date du script : 15/07/2004 16:06:23 ******/ CREATE FUNCTION FN_WINTER_DATE (@Y INT) RETURNS DATETIME AS -- calcul de la date de début d'hiver BEGIN -- @Y est l'année considérée -- effets de bord : année absente IF @Y IS NULL RETURN NULL -- limites de calculs de l'an 1000 à l'an 3000 IF NOT @Y BETWEEN 1000 AND 3000 RETURN NULL DECLARE @M FLOAT(50) DECLARE @JDME FLOAT(50) SET @M = (CAST(@Y AS FLOAT(50)) - 2000.0) / 1000.0 SET @JDME = 2451900.05952 + 365242.74049 * @M - 0.06223 * SQUARE(@M) - 0.00823 * POWER (@M, 3) + 0.00032 * POWER (@M, 4) RETURN dbo.FN_SUB_SEASONS (@JDME) END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO