operadores operador not logicos fechas ejemplos diferente compuestos aritmeticos sql sql-server

not - operadores logicos sql server ejemplos



Operador Ampersand(&) en una cláusula WHERE de SQL Server (4)

Lo siento por la pregunta muy básica. ¿Qué hace el operador & en este SQL?

WHERE (sc.Attributes & 1) = 0

sc es un alias para una tabla que contiene attributes columna.

Estoy tratando de entender algo de SQL en un informe y esa línea hace que devuelva 0 entradas. Si lo comento funciona. Tengo conocimientos limitados de SQL y no estoy seguro de lo que está haciendo el & 1 .




Viendo que etiquetaba esto como servidor SQL, pensé que agregaría algo desde un ángulo diferente, ya que también me encontré con uno de estos esta semana.

Estos pueden perjudicar el rendimiento de sus consultas si se utilizan en el predicado. Muy fácil de fabricar un ejemplo propio. Aquí está el fragmento de mi consulta

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

simplemente definiendo cada columna con un valor adecuado, esto permitió al optimizador eliminar una búsqueda de marcadores y las estadísticas de rendimiento mostraron un aumento en el rendimiento de X10.


& es el operador y lógico a nivel de bits : realiza la operación en 2 valores enteros.

WHERE (sc.Attributes & 1) = 0

El código anterior verifica si sc.Attributes es un número par. Que es lo mismo que decir que el primer bit no está establecido.

Sin embargo, debido al nombre de la columna: "Atributos", entonces el valor "1" es probablemente solo una marca que tiene algún significado externo.

Es común usar 1 dígito binario para cada bandera almacenada en un número para los atributos. Entonces, para probar el primer bit que usa sc.Atributos & 1, para probar el segundo bit que usa sc.Attributes & 2, para probar el tercero que usa sc.Attributes & 4, para probar el cuarto bit que usa sc.Attributes & 8, ...

La parte = 0 está probando para ver si el primer bit NO está establecido.

Algunos ejemplos binarios: (== para mostrar el resultado de la operación)

//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