2011-07-15 11 views
2

ビット単位の操作を効果的に使用して、2番目の値が最初の値のスーパーセットである2つの値を比較できますか?ビット単位の操作と値の比較

属性1,2および3がONである場合、属性1と2をONまたはOFにすることができ、3をONにする必要がある値に一致させる必要があります。

enum user_attribs { 
    attrib1 = 0, attrib2 = 1, attrib3 = 2 
} 

enum spt_attribs { 
    attrib1 = 0, attrib2 = 1, attrib3 = 2 
} 

user_attribs u1 = attrib1 & attrib2 & attrib3; 

spt_attribs s1 = attrib1 & attrib2 | attrib3; 

u1 = s1上記のコードでSQLに有効ですか?

更新:RDBMSはSQL SERVER 2008 R2です。私はデータベースの格納された属性を比較しようとしています。私は、システムプロファイルがユーザーのスーパーセットである「システムプロファイル」への「ユーザープロファイル」の価値を成功と比較できるようにしたいと考えています。ユーザープロファイルはシステムプロファイルと一致する必要があります。ユーザーのビットが1101に設定されている場合は、システムビット1101または1001または1100などと一致します。SQLステートメントのWHERE句の両方の設定を一致させるには、システムプロファイルが必要です。

+0

意味 "の成功に値を比較する" んでしょうか? –

答えて

0

これはSQLでできることではありません。 TSQLまたはPL/SQLについて話しているかもしれません。何のRDBMSを使用していますか?

+0

これは、コメントではなく、答えとして行われている必要があります... – Joe

+0

実際には、彼は彼がSQLでそれを行うことができるかと尋ねた私は彼に答えた – jworrin

+2

@ jworrin:私はあなたが* SQL ' TSQLとPL/SQLはいずれもエントリ・レベルの標準SQL-92を実装しています。ただし、標準SQL-92では、このような演算子は設計によって提供されていません。同様の例は 'mod'関数/演算子です:標準では提供されていませんが、すべてのSQL製品には1つあります。 – onedaywhen

2

あなたのRDBMSを述べていないが、SQL Serverはビット単位の演算子をサポートしています。OracleはBITANDを持って

-- must be powers of 2... 
attrib1 = 1 
attrib2 = 2 
attrib3 = 4 
... 

-- Check if attrib1 and atrrib2 are set 
IF ((col1 & (atrib1 | attrib2)) = (atrib1 | attrib2) 

そして、あなたは次のように使用します

MySQLはビット関数があります。

関連する問題