Знам, че мога да използвам изявление 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 за отговор № 1CASE може да изчисли всяка стойност, дори булева стойност, върната от сравнението. В 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)
...