1

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

没有找到 value=NULL 的记录,只有 value=0 的记录 :o(

我必须将我的列转换为布尔值吗?

4

2 回答 2

3

铸造在这里无济于事(CAST (null AS sometype)仍然为NULL)。您可以使用的任何内容都或多或少等同于您现在使用的表达方式:我发现WHERE NOT COALESCE(MyBoolean,0)更具可读性,但这是个人喜好。

于 2013-02-14T11:25:31.647 回答
1

处理 NULL 布尔值确实很棘手。

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

做你的MyBoolean NOT NULL DEFAULT TRUE(或FALSE,取决于)。

它可能需要少量的代码重构,但它会保持所有代码SELECT的清洁、可读性,并且会让你避免使用 hacky 方法。

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

希望这对任何人都有帮助。

于 2014-10-06T08:50:40.153 回答