Сравните значения с побитовыми операциями - PullRequest
2 голосов
/ 15 июля 2011

Можно ли эффективно использовать побитовые операции для сравнения двух значений, где второе значение является надмножеством первого?

Если у меня есть атрибуты 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 с указанным выше кодом?

ОБНОВЛЕНИЕ: СУБДтакое SQL SERVER 2008 R2.Я пытаюсь сравнить сохраненные атрибуты в базе данных.Я хотел бы иметь возможность сравнить с успехом значение «пользовательского профиля» с «системным профилем», где системный профиль является надмножеством пользователя, например, профиль пользователя должен соответствовать системному профилю.Если биты пользователя установлены на 1101, это будет соответствовать системному биту 1101 или 1001 или 1100 и т. Д. Мне нужно, чтобы системный профиль совпадал с обоими настройками в предложении «WHERE» инструкции SQL..

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Вы не указали свою СУБД, но 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 имеет битовые функции:

0 голосов
/ 15 июля 2011

это не то, что вы можете сделать с SQL.Вы можете говорить о TSQL или PL / SQL.Какие СУБД вы используете?

...