1

次の場合にレコードを提供するSQLiteWHERE句を探しています。

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クリーンで読みやすくなり、ハッキーな方法を使用する必要がなくなります。

繰り返しますが、アーキテクチャが非常に柔軟性がなく、この種のリファクタリングを実行できない場合、このソリューションは機能しない可能性があります。

これが誰かに役立つことを願っています。

于 2014-10-06T08:50:40.153 に答える