我正在寻找一个SQLite WHERE子句,如果它们是:
,它将为我提供记录0 (false)
NULL (false)
1 (true)
除了0和1之外,我还有NULL的记录。
我现在做了
SELECT * FROM my_table WHERE (MyBoolean IS NULL OR MyBoolean = 0) AND SomeOtherValue NOT NULL;
使用时
SELECT * FROM my_table WHERE NOT MyBoolean AND SomeOtherValue NOT NULL;
找不到值= NULL记录,只有值= 0记录:o(
我是否必须将我的列强制转换为布尔值?
答案 0 :(得分:2)
此处的强制转换无效(CAST (null AS sometype)
仍然为NULL)。您可以使用的任何内容都或多或少等同于您现在使用的表达式:我发现WHERE NOT COALESCE(MyBoolean,0)
更具可读性,但这是个人偏好。
答案 1 :(得分:1)
处理NULL布尔值确实非常棘手。
我对您的代码架构一无所知,但请尝试考虑以下内容:
制作MyBoolean
NOT NULL DEFAULT TRUE
(或FALSE
,取决于)。
它可能需要进行少量代码重构,但它会使所有SELECT
保持清晰,可读,并且会使您无法使用hacky方法。
我将重复一遍:如果您的架构非常不灵活并且您无法执行此类重构,则此解决方案可能无效。
希望这有助于任何人。