If / Switch / Case или простая логическая арифметика c в операторе SELECT в HQL / SQL - PullRequest
0 голосов
/ 20 февраля 2020

Я ищу элегантное решение следующей проблемы: у меня есть таблица с некоторыми данными, которая классифицируется по столбцу ok (логическое значение). Если ok истина, то данные действительны, если ложь, то нет.

Теперь у меня есть параметр filterOff (логическое значение), который должен выполнять следующие действия: если для него установлено значение true, то он должен игнорировать столбец ok (или выполнить поиск для оба ok = TRUE и ok = FALSE) и возвращают все строки. Если установлено значение false, то оно должно возвращать только те строки, для которых ok = true. Если он не установлен (равно NULL), он должен вести себя так же, как если бы он был ложным.

Условия

1. filterOff == NULL OR filterOff == FALSE => ok = TRUE

2. filterOff == TRUE => ok = TRUE OR ok = FALSE

Для 1-го я бы используйте вот что: ok <> COALESCE(filterOff, FALSE)

Однако в 2-м условии отсутствует часть ok = FALSE.

Кто-нибудь может помочь? Заранее спасибо!

С наилучшими пожеланиями

IceThunder

1 Ответ

0 голосов
/ 20 февраля 2020
(COALESCE(filterOff, FALSE) AND TRUE) OR ok = TRUE

Вот и все.

...