Использование 0x800 в предложении SQL WHERE - PullRequest
2 голосов
/ 23 июля 2010

Я пытаюсь расшифровать некоторые операторы SQL, используя SQL Profiler, которые запускаются из проприетарного приложения.

Одним из операторов является:

SELECT ID, Groups, Name, Gallery FROM DashboardReports WHERE (Groups & 0x800) <> 0 AND Root = 1 ORDER BY Name

Может кто-нибудь объяснить, какГде работает пункт?Я никогда не видел такого предложения WHERE, как раньше, а столбец «Группы» содержит целочисленные значения, такие как 2048,2176,150 И 414.

Спасибо, Дэнни

1 Ответ

2 голосов
/ 23 июля 2010

Это побитовая операция - http://en.wikipedia.org/wiki/Bitwise_operation

0x800 в шестнадцатеричном виде - это 2048, так что это будет то же самое, что и запись (Groups & 2048) <> 0

Это гдеВ предложении говорится, что запрос должен отфильтровывать все записи, у которых отключен 12-й бит в столбце Группы.

2048 означает, что 12-й бит включен (это имеет больше смысла, когда вы смотрите на число какдвоичное значение).

0000 1000 0000 0000 = 2048

это удобный способ сохранить несколько значений в одном столбце.150 - это комбинация битов (128 и 32), которые оба оценили бы как истинные:

(Groups & 128) <> 0
(Groups & 32) <> 0

Вот краткий список битов и их значений для вас:

1  1
2  2
3  4
4  8
5  16
6  32
7  64
8  128
9  256
10 512
11 1024
12 2048

Этостатья может помочь - http://www.codeproject.com/KB/cpp/bitbashing.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...