Bonjour,
J'utilise actuellement B.O. et pour certaines raisons, je dois dans une requête SQL pouvoir retourner une date X ou une date Y.
La date X est une date "absolue" renseignée par l'utilisateur et la date Y, une date "relative" calculée à partir de la date actuelle et des informations donnés par l'utilisateur.
Si la date "relative" est égale à la date actuelle, je veux retourner la date X, sinon je retourne la date Y.
J'ai donc tenté de passer par des entiers (pour plus de facilité) avec x et y respectivement le nombre de jours (à virgule) entre SYSDATE et les dates X et Y.
Je sélectionne le soit x ou y puis je recalcule la date à retourner à partir de SYSDATE.
En résumé :
x = SYSDATE - X
y = SYSDATE - Y
z = ( choix entre x et y)
Résultat = SYSDATE - z
Mais le problème se pose pour le choix entre x et y.
Je dois donc choisir x si y = 0 sinon je retourne y.
Or non seulement il n'y a pas de conditions possibles dans les choix de colonnes d'un select (je ne parle pas de la clause WHERE), mais en plus, y + x*( y = 0) n'est pas accepté par oracle.
Je pense donc faire quelque chose comme : x - (x/(y+e))*y + y avec e un nombre décimal donc la valeur absolue est très petite.
Ainsi si y = 0, le résultat sera x et si y != 0, le résultat sera y + (xe)/(y+e)
or comme e étant très petit, le résultat sera à peu près y.
Je me demandais s'il n'y avait pas une solution plus élégante ou si vous saviez comment je pourrais choisir e pour que sa valeur absolue soit la plus petite possible.
Partager