Подтвердить что ты не робот

Оператор Ampersand (&) в SQL Server Предложение WHERE

Извините за самый простой вопрос. Что делает оператор & в этом SQL

WHERE (sc.Attributes & 1) = 0 

sc является псевдонимом для таблицы, которая содержит столбец attributes.

Я пытаюсь понять некоторый SQL в отчете, и эта строка возвращает 0 записей. Если я прокомментирую это, это сработает. У меня ограниченные знания SQL, и я не уверен, что делает & 1.

4b9b3361

Ответ 1

& является побитовым логическим и оператором - он выполняет операцию с двумя целыми значениями.

WHERE (sc.Attributes & 1) = 0 

Вышеприведенный код проверяет, является ли sc.Attributes четным числом. Это то же самое, что сказать, что первый бит не установлен.

Из-за имени столбца, хотя: "Атрибуты", то значение "1", вероятно, просто является некоторым флагом, который имеет какое-то внешнее значение.

Обычно для каждого флага, хранящегося в числе атрибутов, используется 1 двоичная цифра. Таким образом, чтобы проверить первый бит, вы используете sc.Attributes & 1, чтобы проверить второе, вы используете sc.Attributes & 2, чтобы проверить третий, вы используете sc.Attributes & 4, чтобы проверить, что четвертый использует sc. Атрибуты & 8,...

Параметр = 0 проверяет, не установлен ли первый бит.

Некоторые двоичные примеры: (==, чтобы показать результат операции)

//Check if the first bit is set, same as sc.Attributes&1
11111111 & 00000001 == 1
11111110 & 00000001 == 0
00000001 & 00000001 == 1


//Check if the third bit is set, same as sc.Attributes&4
11111111 & 00000100 == 1
11111011 & 00000100 == 0
00000100 & 00000100 == 1

Ответ 4

Увидев, как вы отметили это как sql-сервер, я подумал, что добавлю что-то под другим углом, так же как и на этой неделе.

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

WHERE
advertiserid = @advertiserid
AND (is_deleted & @dirty > 0)

WHERE
advertiserid = @advertiserid
AND (is_deleted > 0 AND @dirty > 0)

просто определяя каждый столбец с правильным значением, это позволило оптимизатору удалить поиск по закладкам, а статистика производительности показала увеличение производительности X10.