/ / SQLite if в клаузата WHERE - sqlite, case, where-clause

SQLite if в клаузата WHERE - sqlite, case, where-clause

Знам, че мога да използвам изявление CASE в SQLite заявка, но не знам как да я построя в клауза WHERE.

Всъщност имам това в дълга клауза WHERE (това е само въпросната част):

AND (%d >= (wines.year + wines.maturity)) AND (%d < (wines.year + wines.apogee))

Всъщност искам само:

AND (%d >= (wines.year + wines.maturity))

=> ако wines.apogee е NULL

или също:

AND (%d >= (wines.year + wines.maturity)) AND (%d < (wines.year + wines.apogee))

=> ако wines.apogee НЕ Е НАЧАЛНА

Как да използваме изявлението CASE в този случай, за да проверим дали wines.apogee НЕ е NULL и в този случай да добави втората част от искането?

Благодаря !

Отговори:

4 за отговор № 1

CASE може да изчисли всяка стойност, дори булева стойност, върната от сравнението. В SQLite, 1 е същото като "вярно":

...
AND %d >= (wines.year + wines.maturity)
AND CASE WHEN wines.apogee IS NOT NULL
THEN %d < (wines.year + wines.apogee)
ELSE 1
END
...

Същото може да се направи с ifnull () функция:

...
AND %d >= (wines.year + wines.maturity)
AND ifnull(%d < (wines.year + wines.apogee), 1)
...