0
votes

Comment utiliser l'instruction case dans la condition WHERE dans Oracle SQL?

SELECT DY,ME,NONME 
FROM ( 
    SELECT LEVEL, TO_CHAR(SYSDATE+ROWNUM,'DAY') DY , 0 ME, 2 NONME
    FROM DUAL
    CONNECT BY LEVEL <=10
) 
WHERE ?
If the condition is (ME < NONME) then not in ('SATURDAY','SUNDAY')when (ME> NONME) then not in ('FRIDAY', 'SATURDAY')How to use?

2 commentaires

Il est généralement préférable d'utiliser les constructions AND / OR au lieu des expressions case expressions dans le code WHERE clause .


À propos, il est préférable d'utiliser des noms abrégés (ne serait-ce que pour éviter de couper les espaces) et de spécifier une langue, par exemple to_char (sysdate + rownum, 'DY', 'nls_date_language = English')


4 Réponses :


0
votes
(
  (ME<NONME and .... not in (...)) OR
  (ME>NONME and .... not in (...))
)

1 commentaires

Bien que ce code puisse répondre à la question, il fournit un contexte supplémentaire concernant pourquoi et / ou comment ce code répond à la question améliore sa valeur à long terme .



0
votes

Supposons que vos données de test soient les suivantes:

M N DY      
- - --------
A B FRIDAY  
B A SUNDAY  

Vous devez évaluer l'implication A -> B qui peut être réécrite comme PAS A OU B

En utilisant cette règle, votre requête

select * from tab
where 
-- (ME < NONME) --> not in ('SATURDAY','SUNDAY')
(not (ME < NONME) or DY not in ('SATURDAY','SUNDAY'))  AND
-- (ME> NONME) -->  not in ('FRIDAY', 'SATURDAY')
(not (ME > NONME) or DY not in ('FRIDAY', 'SATURDAY'))
;

donne

select * from tab;

M N DY      
- - --------
A B FRIDAY  
A B SATURDAY
A B SUNDAY  
B A FRIDAY  
B A SATURDAY
B A SUNDAY  


0 commentaires

0
votes

Vous pouvez utiliser une requête contenant NOT regexp_like () insensible à la casse avec des opérateurs AND entre parenthèses et un opérateur OR combinant ces expressions: < pre> XXX

Démo


0 commentaires

0
votes

Si vous souhaitez utiliser l'instruction case..when , alors cela doit être fait comme suit:

.....
Where case 
      when ME < NONME and dy not in ('SATURDAY','SUNDAY')
      then 1 
      When ME > NONME and DY not in ('FRIDAY', 'SATURDAY') 
      then 1
      end = 1

Cheers !!

p >


0 commentaires