USE [master]
GO
/****** Object: UserDefinedFunction [dbo].[Ferie] Script Date: 07/29/2009 15:15:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Function [dbo].[Ferie](@jour datetime) returns varchar(1)
Begin
declare @JJ int, @mm int, @AA int, @NbOr int, @Epacte int, @PLune datetime, @Paques datetime, @Ascension datetime, @Pentecote datetime;
set @JJ = Day(@Jour);
set @mm = Month(@Jour);
set @AA = Year(@Jour);
If @JJ = 1 And @mm = 5
return 'Y' --1 Mai
If @JJ = 8 And @mm = 5
return 'Y' --8 Mai
If @JJ = 14 And @mm = 7
return 'Y' --14 Juillet
If @JJ = 15 And @mm = 8
return 'Y' --15 Août
If @JJ = 1 And @mm = 11
return 'Y' --1 Novembre
If @JJ = 11 And @mm = 11
return 'Y' --11 Novembre
If @JJ = 25 And @mm = 12
return 'Y' --25 Décembre
set @NbOr = (@AA % 19) + 1
set @Epacte = (11 * @NbOr - (3 + ((2 + (@AA / 100)) * 3 / 7))) % 30
set @PLune = convert(datetime,'19/04/' + @AA) - ((@Epacte + 6) % 30)
If @Epacte = 24
set @PLune = @PLune - 1
If @Epacte = 25 And (@AA >= 1900 And @AA < 2000)
set @PLune = @PLune - 1
set @Paques = @PLune - datepart(weekday, @PLune) + 7 --Paques
If @JJ = Day(@Paques) And @mm = Month(@Paques)
return 'Y'
set @Ascension = @Paques + 38 --Ascension
If @JJ = Day(@Ascension) And @mm = Month(@Ascension)
return 'Y'
set @Pentecote = @Ascension + 11 --Pentecote
If @JJ = Day(@Pentecote) And @mm = Month(@Pentecote)
return 'Y'
return 'N'
End
Partager