2010-12-02 11 views
10

Quiero seleccionar algo condicionalmente según si un campo de bit es verdadero o falso. Esta fue la sintaxis que he intentado originalmente:¿Por qué no puedo usar un campo de bit como una expresión booleana en una declaración de caso de SQL?

CASE WHEN isSoon THEN 'Soon' ELSE 'Not so soon' END As HowSoon 

Esto tiene sentido para mí ya lo que sigue el "cuándo" tiene que ser una expresión booleana, que es isSoon, ya que es un campo de bits. Sin embargo, esto no funcionó. Lo que tenía que hacer en el final fue:

CASE WHEN isSoon = 1 THEN 'Soon' ELSE 'Not so soon' END As HowSoon 

Esto parece redundante para mí ... Es como escribir if(isSoon == True) en un lenguaje de programación en lugar de la más intuitiva if(isSoon) y va contra la corriente. ¿Por qué SQL está configurado así? ¿Es porque los campos de bits no son realmente booleanos?

+1

¿Puede decirnos también qué proveedor de base de datos está utilizando? MySQL no parece tener un problema con eso. –

+2

Esto me molesta también, pero sql no está configurado de esa manera. De la misma manera que no puede usar un cálculo cuando pasa un parámetro a un SP (por ejemplo, no puede hacer 'exec ListPermissionsByUser @ DomainName + '\' + @ UserName') –

Respuesta

13

Como el tipo de datos de bit no es un tipo booleano, es un tipo de datos utilizado para optimizar el almacenamiento de bits.

El hecho de que la cadena "true" y "false" se pueda convertir a un bit puede ser engañoso, sin embargo, citando de MSDN, un bit es "Un tipo de datos entero que puede tomar un valor de 1, 0 , o NULL ".

+4

Esto no parece responder al POR QUÉ de eso . Sí, es un 1, 0 o nulo. Pero eso es solo un valor booleano anulable (suponiendo que la columna permita valores nulos). ¿POR QUÉ la gente de SQL decidió tratarlo como un 'supersmallint' en lugar de como el bool que representa y se utiliza como 99.9999% del tiempo. – Vaccano

+2

@Vaccano: Es una respuesta en realidad. El tipo de datos con 3 estados posibles (nullable bool - bit en caso de SQL) es muy diferente del tipo de datos con 2 estados posibles (bool) –

Cuestiones relacionadas