Salut à tous,
Je dois calculer la période pour la société où je fais mon stage, et l’inscrire dans une table de dimension temps. Jusqu’ici ma table est déjà presque complète. Apres correction par mon encadreur, je dois corriger la colonne période qui est encore fausse.
La période correspond toujours au Nr du mois et est fonction de la position du 1er lundi de ce mois.
Période 1 = Janvier
Période 2 = Février
Période 3 = Mars
Période 4 = Avril
Période 5 = Mai
…
Période 11 = Novembre
Période 12 = Décembre
Le principe de calcul:
- Le premier lundi du mois est déminant.
U]Exemple 1[/U]:
Lundi le 29 septembre 2008 appartient à la semaine du Lundi 29/09/2008 au Dimanche 5/10/2008. Ce qui veut dire que dans ce cas le numéro de la période sera égale au numéro du mois, C a d 9(car mois de septembre)
Exemple 2 :
Lundi 6/10/08 appartient à la période 10
Lundi 27 octobre 2008 au dimanche 2 novembre 2008 -> Période 10(car le lundi est situé dans le mois d’octobre)
Lundi 29/12/2008 au 4/01/09 -> période 12
J’ai un début de code. Mais il me renvoie toujours 9.
Ma question est la suivante : Comment obtenir le premier jour du mois (en lettre ex : Lundi) en Oracle SQL, pour pouvoir faire des comparaison avec le résultat de la fonction « Day » de oracle ?
Pouvez vous me donner une piste SVP ? Car je traîne depuis sur ce bout de code et n’avance pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE OR REPLACE FUNCTION F_MaPeriode(MaDate IN date) RETURN NUMBER IS pNr NUMBER := 0; d DATE := trunc(MaDate); BEGIN If to_char(MaDate, 'Day') = 'Lundi' THEN pNr := to_char(MaDate, 'MM');--Jour de la semaine ELSE pNr := to_char(MaDate, 'MM') -1; end IF; RETURN (pNr); END F_ MaPeriode;
Merci
Fiona
Partager