2017-11-30 3 views
0

私はこのようになりますテーブル(1つだけのブールフィールドを)持っている: SQL - ビット単位のANDブール値フィールドのすべての結果

| IsTrue  | 
--------------- 
| 1   | 
--------------- 
| 1   | 
--------------- 
| 0   | 
--------------- 
| 1   | 
--------------- 

私はビット演算を行うことができます方法はあり、すべての値に私は単一の真偽結果を持つようにこのフィールドに?

次のようになります。select BITWISE_AND(IsTrue) from MyTableこれはちょうど| 0 | ?

+0

使用しているデータベースで質問にタグを付けてください。また、列が* bit *か* boolean *かどうかについても明確にしてください。これらは必ずしも同じものではありません。 –

答えて

2

あなたが唯一の0または1を取る値を持っている場合は、 "ビット単位とは" min()と同等です:

select min(IsTrue) as "bitwise_and" 

そして "ビット単位または" max()と同等です:

select max(IsTrue) as "bitwise_or" 

これは数値的な事実なので、使用されているデータベースとは独立しています。

+0

いつものようにすばらしい答え@ゴードン – Hackerman

+0

私はあなたがintにboolを変換したいと思ったが、うん!これはトリックです!とても有難い。 –

0

恐らく最も一般的な解決策は、上記のように1または0のいずれかが含まれている額面値をとることができる場合はおそらくmin(IsTrue)です。

しかし、カップルの注意事項:

あなたが「ビット単位」 ANDのために求めている

が、あなたはを記述している「論理的」AND - これは、カラムが保持している場合、数字「1 = TRUEまたは0 = FALSE "は同じです。他のケースではちょっとだけ同じかもしれません。

データベースによってはビット演算子を提供するものもあれば、そうでないものもあります。そしてビット単位の集約関数はまったく別のものです。このため、minがより一般的な解決策です。どのデータベースでも提供される標準的な機能です。そして、それはあなたが概説しているような状況を含む、幅広い状況で動くでしょう。カラム型が技術的にDBMSがminを定義していないもの(またはそれをいくつかの奇妙な方法で定義したもの)であると失敗します。 のネガティブの数値が "true"と解釈された場合は失敗します(ただしその場合は、min(abs(isTrue))などで取得できます)。

関連する問題