2010-12-02 9 views
10

ビットフィールドが真であるか偽であるかに基づいて条件付きで何かを選択したいと思います。SQLのcase文でブール式としてビットフィールドを使用できないのはなぜですか?

CASE WHEN isSoon THEN 'Soon' ELSE 'Not so soon' END As HowSoon 

これは、次の何ので、私には理にかなって、それはビットフィールドだとして、あるisSoonブール式、である必要があり、「WHEN」:これは私が最初に試した構文をしました。しかし、これはうまくいかなかった。私は終わりにしなければならなかったことだった:これは私には思える冗長

CASE WHEN isSoon = 1 THEN 'Soon' ELSE 'Not so soon' END As HowSoon 

...それは代わりに、より直感的なif(isSoon)のプログラミング言語でif(isSoon == True)を書くようなものだと穀物に反します。なぜSQLはこのように設定されていますか?それはビットフィールドが本当にブール値ではないからですか?

+1

また、使用しているデータベースプロバイダを教えてください。 MySQLはそれに問題がないようです。 –

+2

このバグは私もあまりにも、SQLはそのように設定されていません。同じ方法で、SPにパラメータを渡すときに計算を使用できないようにします( 'exec ListPermissionsByUser @DomainName + '\' + @ UserName'は実行できません) –

答えて

13

ビットデータ型はブール型ではないため、ビットストレージを最適化するために使用されるデータ型です。

"true"と "false"という文字列をビットに変換できるという事実は誤解を招く可能性がありますが、MSDNからのビットは"1の値を取ることができる整数データ型、またはNULLです。

+4

これはWHYの答えです。うん、それは1,0、またはnullです。しかし、それは単にNULL可能な真偽値です(列がNULLを許容すると仮定します)。 SQLの人々は、それを表すboolではなく「supersmallint」のように扱い、その時間の99.9999%として使用されるのはなぜですか? – Vaccano

+2

@Vaccano:実際は答えです。 3つの可能な状態(SQLの場合、null可bool - bit)を持つデータ型は、2つの可能な状態(bool)を持つデータ型と大きく異なります。 –