2011-08-23 13 views
11

SQLでは、特定のビットが整数型(MySQL)でオンになっているかどうか検出したいと思いますか?SQL - 整数型 - 検出ビット

どうすればいいですか?

基本的に、ビットがオンかどうかを検出し、オンの場合は無視します。

私は今、このようなものを使用しています:

WHERE (column & 2) != 2 
+0

あなたはについて話していますビット列または整数列?あなたは何を意味しますか?質問を言い換えてください。 – Caimen

+0

あなたはどのデータベースを使用していますか? – Bohemian

+0

ビットマップフラグは3GLの列挙型では問題ありませんが、SQLなどの4GLはリレーショナルデータ、つまりタプルと属性との関係に最も適しています。 – onedaywhen

答えて

13

はあなたがチェックしていると言います3ビットTHEN ...

SELECT bits & 8 = 8 FROM table; 

これはバイナリ(1または0)(この場合、第三に)当該ビット列「ビット」の行ごとにオンまたはオフであるかどうかのために返します。

xの代わりに2番目のxを8の代わりに使用します。

例えば

は、我々はしかし、2^5 = 32

SELECT bits & 32 = 32 FROM table; 

を使用する5ビット目をチェックするために、これは不必要に複雑です。ブール値を複数の列で使用するだけで、作業がはるかに簡単になります。MySQLの

+0

正確にSELECTビット&8 = 8 FROMテーブルです。やっている?列のビットと8 = 8を選択していますか? – RoR

+0

基本的な考え方は、 '&'演算子が両方の引数で 'on'のビットを決定するということです。したがって、(ビット&8 = 8)は8(ちょうど3番目のビット)と列「ビット」が対応するビットを持つかどうかを決定します。 クエリ全体の結果は、3番目のビットがオンの場合の一連のバイナリ結果です。 – PyKing

2

SQLは、標準のビット演算子をサポートしています。

DECLARE @BitMask INT 
SET @BitMask = 34 

SELECT 
    @BitMask & 32, -- Returns 32, ON 
    @BitMask & 16 -- Returns 0, OFF 
0

あなたが使用しているデータベースプラットフォームのための質問にタグを付ける必要があります。

これは、SQL Server 2008のであれば、あなたはそのビットあなたがテストに興味があるパターンに設定されている整数に比較すること(特にビット単位または等しい)ビット演算子を使用することができます。梱包でいることhttp://msdn.microsoft.com/en-us/library/cc627409.aspx

注意これらの整数を使用すると、それらの列のインデックスの使用を妨げる可能性が高くなります。

0

私は、これはあなたが望むものを達成するのに役立ちます信じて:

SQL bit manipulation

0

、0 =偽。
MS Accessでは、-1 = true、0 = falseです。
...
誰かが他の方言を記入できるかもしれません。

あなたはアプリケーション層でビットを解釈している場合は、変換関数を使用することができるはずです(例えば、VBであなたが真か偽解釈するIF convert.toboolean(myValue) THEN...を言うかもしれない。

1

、あなたは、この使用し、ビット2は、(0から数えて)column1のために設定されている場合はブールtrueを取得するには、例えば

をマスクビットで、ビット単位のAND演算子&を使用することができます。

where (column1 & 4) = 4 

これは、両方のビット0と2が設定されていることを確認するために、たとえば、複数のビットチェックのために動作します:

where (column1 & 5) = 5 
関連する問題