Bonjour,
Sur Oracle, les fonctions "decode" et "to_char" te permettraient de faire quelque chose comme cela :
Code sql :
SELECT
DateFabrication +
DECODE (
TO_CHAR(
DateFabrication +
DureeCtrl +
DureeLiv, 'D'
),
1, 2,
7, 2,
0
)
FROM ...
Note : j'ai assumé que DateFabrication est une date SQL, et que DureeCtrl et DureeLiv sont tous deux des entiers.
Détails de la requête SQL.
Code sql :
DateFabrication + DureeCtrl + DureeLiv
Retourne la date de fabrication + durée de contrôle et de livraison. (Date notée X pour la suite)
Code sql :
La fonction TO_CHAR prenant en paramètre la date obtenue ci-dessus et 'D' (pour Day) va retourner le jour de la semaine correspondant à cette date (Jour noté Y pour la suite).
Le jour de la semaine commence à 1 qui représente Dimanche, ce qui veut dire que les jours de weekend sont 1 et 7.
Code sql :
DECODE (
Y,
1, 2,
7, 2,
0
)
DECODE fonctionne comme un IF/THEN/ELSE :
* le premier paramètre est l'expression que l'on cherche à comparer
* le deuxième paramètre est la valeur comparée à l'expression
* le troisième paramètre est la valeur de retour si l'expression correspond à la valeur précedente
* (deuxième et troisième paramètres peuvent se répéter au besoin)
* la dernière valeur est optionnelle, c'est la valeur retournée par défaut si aucune valeur n'a correspondu à l'expression évaluée.
Ici decode prend Y, le jour de la semaine, et le compare avec 1 ou 7, pour lesquels on retourne 2, et sinon retourne 0. (Notons ce résultat Z pour la suite)
Code sql :
SELECT
DateFabrication + Z
FROM ...
0 ou 2 peut enfin être ajouté à DateFabrication.
Ca devrait couvrir ton besoin si je l'ai bien compris :)
Fanny
PS : Il y a peut être un moyen plus facile d'y arriver, mais c'est ce qui m'est passé par la tête.