SQLite Boolean WHERE检查0和NULL值

时间:2013-02-14 11:18:19

标签: sqlite casting boolean

我正在寻找一个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(

我是否必须将我的列强制转换为布尔值?

2 个答案:

答案 0 :(得分:2)

此处的强制转换无效(CAST (null AS sometype)仍然为NULL)。您可以使用的任何内容都或多或少等同于您现在使用的表达式:我发现WHERE NOT COALESCE(MyBoolean,0)更具可读性,但这是个人偏好。

答案 1 :(得分:1)

处理NULL布尔值确实非常棘手。

我对您的代码架构一无所知,但请尝试考虑以下内容:

制作MyBoolean NOT NULL DEFAULT TRUE(或FALSE,取决于)。

它可能需要进行少量代码重构,但它会使所有SELECT保持清晰,可读,并且会使您无法使用hacky方法。

我将重复一遍:如果您的架构非常不灵活并且您无法执行此类重构,则此解决方案可能无效。

希望这有助于任何人。