Je code pour déterminer combien de jours dans une année. J'essaie de le garder vraiment simple. J'ai trouvé un code que je trouve très propre pour déterminer une année bissextile. Je passe la date saisie en utilisant DATEPART (Y, @ Année) au programme d'année bissextile et d'autres comment ne pas obtenir les bons résultats, donc je dois être dans mon code SQL pour traiter la date d'entrée que le bon bit est retourné.SQL UDF scalaire pour obtenir le nombre de jours dans l'année
Voici le code pour l'année bissextile:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FN_Is_Leap_Year]
(
-- the parameters for the function here
@year int
)
RETURNS BIT
AS
BEGIN
RETURN (select case datepart(mm, dateadd(dd, 1, cast((cast(@year as varchar(4)) + '0228') as datetime)))
WHEN 2 THEN 1
ELSE 0 END)
END
Voici le code que j'ai écrit pour traiter la date d'entrée & obtenir les # jours en un an:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FN_Get_Days_In_Year]
(
@InputDT varchar(10)
)
RETURNS int
AS
BEGIN
DECLARE @Result int,
@Year int
Set @Result =
CASE
WHEN dbo.FN_Is_Leap_Year(Datepart(yyyy,@Year)) = 0 Then 365
WHEN dbo.FN_Is_Leap_Year(Datepart(yyyy,@Year)) = 1 Then 366
END
RETURN @Result
END
dans la dernière section de code, pourquoi appeler la fonction (dbo.FN_Is_Leap_Year) 2 fois dans la déclaration 'de CASE'? vous devez utiliser 'CASE dbo.FN_Is_Leap_Year (Datepart (aaaa, @ année)) QUAND 0 ALORS 365 ELSE 366 END'. Heck, je jetterais la première fonction et juste tirer sa ligne de code dans le 'CASE'. –
'SELECT 1 + DATEDIFF (jour, CAST (@year AS VARCHAR (4)) + '-01-01', CAST (@year AS VARCHAR (4)) + '-12-31');'? – pilcrow