IF Условие в 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'))

он работает в моем навигаторе, но когда я пытаюсь это сделать в SQLite, «IF» не поддерживается.

android,database,sqlite,android,

0

Ответов: 1


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') );
андроид, базы данных, SQLite, андроид,
Похожие вопросы