#database #sqlite
#База данных #sqlite
Вопрос:
Я просто хочу преобразовать этот запрос функции из navicat в запрос sqlite,
Select * from tbl_sample where ID = 1 And IF (
RECEIPT_MODE = 'MANUAL',
DATE(a.MANUAL_COLLECTION_DATE) = DATE('2016-08-10 04:18:00'),
DATE(TPAY_ISSUED_DATE) = DATE('2016-08-10 04:18:00')
)
Ответ №1:
Попробуйте выполнить этот запрос:
SELECT *
FROM tbl_sample
WHERE ID = 1 AND
(
(RECEIPT_MODE = 'MANUAL' AND
DATE(a.MANUAL_COLLECTION_DATE) = DATE('2016-08-10 04:18:00')) OR
(RECEIPT_MODE <> 'MANUAL' AND
DATE(TPAY_ISSUED_DATE) = DATE('2016-08-10 04:18:00'))
)
Используйте правило перезаписи DNF в CNF, чтобы снизить уровень скобок / вложенности:
SELECT *
FROM tbl_sample
WHERE ID = 1
AND ( RECEIPT_MODE <> 'MANUAL' OR
DATE(a.MANUAL_COLLECTION_DATE) = DATE('2016-08-10 04:18:00') )
AND ( RECEIPT_MODE = 'MANUAL' OR
DATE(TPAY_ISSUED_DATE) = DATE('2016-08-10 04:18:00') )
Ответ №2:
Стандартным механизмом SQL для этого IF было бы выражение CASE:
Select * from tbl_sample where ID = 1 And CASE
WHEN RECEIPT_MODE = 'MANUAL'
THEN DATE(a.MANUAL_COLLECTION_DATE) = DATE('2016-08-10 04:18:00')
ELSE DATE(TPAY_ISSUED_DATE) = DATE('2016-08-10 04:18:00')
END