2016-10-13 9 views

答えて

0

if()を使用しないでください。ただ、ロジックを使用します。

select * 
from TABLE 
where id = 1 AND 
     ((receipt_mode = 'MANUAL' and DATE(a.MANUAL_COLLECTION_DATE) = DATE('2015-02-10 09:12:00') or 
     (receipt_mode <> 'MANUAL' and DATE(a.TPAY_ISSUED_DATE) = DATE('2015-02-10 09:12:00')) 
    ); 

編集:私はこのアプローチに同意しないものの

は、[私は、答えでこの編集を残しています。 。

select * 
from TABLE 
where id = 1 
     AND (receipt_mode <> 'MANUAL' OR DATE(a.MANUAL_COLLECTION_DATE) = DATE('2015-02-10 09:12:00')) 
     AND (receipt_mode = 'MANUAL' OR DATE(a.TPAY_ISSUED_DATE) = DATE('2015-02-10 09:12:00')); 
+0

:それは論理的に等価であるかもしれないが、私はそれがほとんどの人々のためのロジックを難読化を考える]

ロジックといえば、あなたは括弧/ネストのレベルを減らすためにDNF CNFへの書き換えルールを使用することができますそれは<>の意味ですか? –

+0

@ user2930462 。 。これは、SQLでは "not equals"を意味します。 –

+0

デモ[ここ](http://www.wolframalpha.com/input/?i=P+AND+(+(+ Q + AND + R +))これは論理的に同等かもしれない –

関連する問題