2011-07-15 34 views
2

是否可以有效地使用按位運算來比較兩個值,其中第二個值是第一個值的超集?將值與按位運算進行比較

如果我將屬性1,2和3設置爲ON,則需要將其與屬性1和2可以打開的值或OF和3必須打開的值相匹配。

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它將匹配系統位110110011100等。我需要系統配置文件匹配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產品都有一個。 – onedaywhen

2

你還沒有說你的RDBMS,但SQL Server支持位運算符:

而且你會使用像:

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

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

甲骨文BITAND:

MySQL有位函數: