Je veux comparer deux chiffres. Prenons IE 1 et 2.
J'ai essayé d'écrire la requête suivante, mais cela ne fonctionne tout simplement pas comme prévu (TOAD dit: ORA-00923: à partir du mot clé non trouvé où attendu): P>
select DECODE(SIGN(actual - target) , -1, 'NO Bonus for you' , 0,'Just made it' , 1, 'Congrats, you are a winner') from some_table
4 Réponses :
Il n'y a pas de types booléens dans SQL (au moins à Oracle). mais votre solution (décodage) est également bon, lisez ICI P> P>
Vous pouvez utiliser case code>:
Le standard SQL fait i> définit un type de données booléen, mais - comme vous l'avez correctement mentionné - Oracle SQL ne le supporte pas (contrairement à d'autres SGBD). Dans une procédure PL / SQL, vous pouvez définir cependant des variables booléennes.
Vous pouvez comparer deux dates avec la méthode SQL
(1): P>
SELECT CASE when MONTHS_BETWEEN('01/01/2012','01/01/2010') > 0 THEN 'FIRST IS GREATER' ELSE 'SECOND IS GREATER OR EQUAL' END FROM dual
Le signe () fonction est en effet probablement probablement La meilleure façon de classifier (dans) l'égalité qui peut vous intéresser si vous souhaitez tester A> B, A = B et A J'utiliserais une déclaration de cas de préférence plutôt qu'un décodage. P>
Utilisation de signe code> pour cela était nécessaire lorsque tout ce que nous avions était
décodage code>, mais avec
case code>, je pense que cela rend simplement le code moins clair. Vous pouvez simplement écrire la comparaison:
Case quand A> B. ALS ... quand A = B ALORS ... Quand un .
Peut-être, en particulier si la comparaison est très brève (A> B) ... Je devrais penser que le signe () serait alors plus utile si vous aviez une longue expression affreuse de travailler avec ce que vous ne voulez pas répéter ( Par exemple, de déterminer si quelque chose était auparavant, sur ou après, puis le premier jour de l'exercice financier, qui peut être un peu ouvrière) ou une fonction coûteuse à appeler pour évaluer l'expression.
SELECT (CASE WHEN (SIGN(actual - target) > 0 ) THEN 'NO Bonus for you' ELSE 'Just made it' END) FROM dual
J'ai trouvé une solution à l'aide de fonctions au lieu d'expression dans la liste Select: c.-à-d. Décode (signe (Cible réelle), -1, «Pas de bonus pour vous», 0, 'vient de le faire', 1, 'félicitations, vous sont un gagnant '). Y a-t-il un moyen plus élégant? Et comment puis-je comparer deux date
Veuillez modifier votre question pour inclure les informations pertinentes, au lieu de laisser un commentaire.
Dupliqué possible de Oracle: Comparaison entre Integer dans Select List