使用按位运算比较值

时间:2011-07-15 01:08:57

标签: sql bit-manipulation bitwise-operators bit-shift

是否可以有效地使用按位运算来比较第二个值是第一个值的超集的两个值?

如果我将属性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,它将匹配系统位110110011100等。我需要系统配置文件匹配SQL语句的“WHERE”子句。

2 个答案:

答案 0 :(得分: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)

Oracle有BitAND:

MySQL具有位功能:

答案 1 :(得分:0)

这不是你可以用SQL做的事情。您可能在谈论TSQL或PL / SQL。您使用的是什么RDBMS?