如何在sqlite查询中转换此代码
Select *
from TABLE
where id = 1 AND
IF(RECEIPT_MODE = 'MANUAL', DATE(a.MANUAL_COLLECTION_DATE) = DATE('2015-02-10 09:12:00'), DATE(a.TPAY_ISSUED_DATE) = DATE('2015-02-10 09:12:00'))
它适用于我的navicat,但是当我在SQLite中尝试这些时,#IF; IF'不受支持。
答案 0 :(得分: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'))
);
编辑:
[我将在答案中留下这个编辑,虽然我不同意这种方法。虽然它在逻辑上可能是等价的,但我认为这会混淆大多数人的逻辑。]
说到逻辑,你可以使用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') );