8
votes

Oracle: Comment puis-je obtenir une valeur "vraie" ou "FAUX" comparant deux numéros dans une requête?

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


3 commentaires

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


4 Réponses :


8
votes

Il n'y a pas de types booléens dans SQL (au moins à Oracle).
Vous pouvez utiliser case : xxx

mais votre solution (décodage) est également bon, lisez ICI


1 commentaires

Le standard SQL fait 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.



1
votes

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


0 commentaires

6
votes

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. xxx


2 commentaires

Utilisation de signe pour cela était nécessaire lorsque tout ce que nous avions était décodage , mais avec case , 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.



1
votes
SELECT (CASE 
WHEN (SIGN(actual - target) > 0 ) THEN 
 'NO Bonus for you' 
ELSE 
 'Just made it'  END)
FROM dual

0 commentaires