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?
4 Réponses :
( (ME<NONME and .... not in (...)) OR (ME>NONME and .... not in (...)) )
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 .
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
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 kbd >
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 >
Il est généralement préférable d'utiliser les constructions
AND/ORau lieu des expressionscaseexpressions dans le codeWHERE > 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')