在SQLite中的IF条件

时间:2016-10-13 02:19:22

标签: android database sqlite

如何在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'不受支持。

1 个答案:

答案 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') );