Decideo - Actualités sur le Big Data, Business Intelligence, Data Science

Abonnez-vous gratuitement à Decideo !


Decideo


 
Forums, dernières contributions

Jours fériés en pl/sql ?

 fab
Mardi 10 Avril 2007

Version imprimable
[Ignorer]
Bonjour,
Dans un état de reporting j'ai besoin de connaitre les jours fériés; bien sur comme c'est variable d'une année sur l'autre et d'un pays à l'autre cette fonctionnalité n'est pas disponible dans Oracle.
C'est pour ça que je demande si l'un d'entre vous a déjà travaillé ou possède une fonction en PL/SQL qui donne les jours fériés ?
 fab
Vendredi 13 Avril 2007

Version imprimable
[Ignorer]
Merci pour ta réponse complète, je vais essayer de décrypter tout ça ;-)
 las
Jeudi 16 Août 2007

Version imprimable
[Ignorer]
slt,
voici un autre algo(de OUDIN) bcp plus simple qui est basé sur la division entière.
La donction retourne le dimanche de päques (en date) elle est ecrite ici en C++/CLI mais tu peux l'adapter a tt c que tu veux
DateTime EasternSunday(int vnYear)
{
int G, C, C_4, E, H, K, P, Q, I, B, J1, J2, R;
DateTime eSunday;

G = vnYear % 19;
C = (int)(vnYear / 100.0);
C_4 = (int)(C / 4.0);
E =(int)((8 * C + 13) /25.0);
H = (19 * G + C - C_4 - E + 15) % 30;
K = (int)(H /28.0);
P = (int)(29 /(H + 1));
Q = (int)((21 - G) / 11.0);
I = (K * P * Q - 1) * K + H;
B = (int)(vnYear /4.0) + vnYear;
J1 = B + I + 2 + C_4 - C;
J2 = J1 % 7;
R = 28 + I - J2;
if (R <= 31)
eSunday = System::Convert::ToDateTime(R.ToString() + '/3/' + vnYear.ToString());
else
eSunday = System::Convert::ToDateTime((R - 31).ToString() + '/4/' + vnYear.ToString());

return eSunday;
}
Il suiffit ensuite de determiner les autres jours ferie(reliieux) comme suit:

LundiPaque = DimachePaque+1jrs
JeudiAscension = DimanchePaque+39jrs (' le jeudi de la sixième semaine après Pâques)
DimanchePentecote = DimanchePaque + 49jrs ( le septième dimanche après Pâques)
LundiPentecote = DimanchePentecote.AddDays+1jr

Assomption = 15 Aout (Ferie catholique et pas ferie pour les protestant)
VendredSaint = DimmanchePaque-2js(Ferie protestant et pas fere pr les catholique)...


 Gamouh Said
Lundi 5 Octobre 2009

Version imprimable
[Ignorer]
Bonjour,

Ci-dessous une fonction PL/SQL qui permet de vérifier si un jour est férrié ou non.

CREATE OR REPLACE Function WRK.F_IsFerie (dtDate DATE, FL_Week_Ferie NUMBER ) RETURN NUMBER
-- Fonction qui prend en paramètre deux variables:
-- dtDate: Date
-- FL_Week_Ferie : Flag permettant de dire si le week end peut etre considèré comme jour férié ou pas.
-- FL_Week_Ferie = 1 => Oui
-- FL_Week_Ferie = 0 => Non
AS
lgTmp1 INTEGER;
lgTmp2 INTEGER;
stDate VARCHAR2(10);
stType NUMBER;
Annee NUMBER(4);
Lundi_paques VARCHAR2(10);
Lundi_pencote VARCHAR2(10);
Ascension VARCHAR2(10);
Num_jour NUMBER :=0;
BEGIN
stType := 0;
lgTmp1:=0;
lgTmp2:=0;
stDate := F_ConvertDate(dtDate);
Annee := TO_CHAR(dtDate, 'YYYY');
Lundi_paques := F_ConvertDate(F_Dimanche_de_Paques(Annee)+1); --'Lundi de paqûes' ,
Lundi_pencote := F_ConvertDate(F_Dimanche_de_Paques(Annee) + 50); --' Lundi de Pencote',
Ascension := F_ConvertDate(F_Dimanche_de_Paques(Annee) + 39); --' Ascension'

-- Jours fériés fixes
-- Nouvel AN 1er janvier
-- Fête du travail 1er mai
-- Victoire 8 mai
-- Fête nationale 14 juillet
-- Assomption 15 Aout
-- Toussaint 1er Novemmbre
-- Armistice 11 Novembre
-- Noêl 25 Décembre
-- Lundi de paqûes
-- Lundi de pencote
-- Ascension

IF (stDate IN ('0101','0105','0805','1407','1508','0111','1111','2512',Lundi_paques,Lundi_pencote,Ascension)) THEN
lgTmp1 := 1;
end if;

IF FL_Week_Ferie = 1 THEN
Num_jour := TO_CHAR(dtDate,'D');
IF Num_jour > 5
THEN lgTmp2:= 1;
ELSE lgTmp2:= 0;
END IF;
END IF;

IF lgTmp1
 Towandaa
Vendredi 13 Septembre 2013

Version imprimable
[Ignorer]
thank you so muche for the function ECCLECTICA!


Twitter
Rss
LinkedIn
Facebook
Apple Podcast
App Store
Google Play Store