Не использовать 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'))
);
РЕДАКТИРОВАТЬ:
[Я оставляю это изменение в ответе, хотя я не согласен с этим подходом. Хотя это может быть логически эквивалентно, я думаю, что это замаскирует логику для большинства людей.]
Говоря о логике, вы можете использовать правило DNF для перезаписи CNF, чтобы уменьшить уровень parens / nesting:
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') );