¿Cuál es la mejor manera de convertir un valor int o nulo a booleano en una consulta SQL?

StackOverflow https://stackoverflow.com/questions/177956

Pregunta

¿Cuál es la mejor manera de convertir un valor int o nulo a booleano en una consulta SQL, de modo que:

  • Cualquier valor que no sea nulo es VERDADERO en los resultados
  • Cualquier valor nulo es FALSO en los resultados
¿Fue útil?

Solución

Según mi conocimiento (corríjame si me equivoco), no hay un concepto de valores booleanos literales en SQL. Puede tener expresiones que evalúen valores booleanos, pero no puede generarlas.

Dicho esto, puedes usar CASE CUANDO para generar un valor que puedas usar en una comparación:

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 

Otros consejos

No es necesario usar el caso ... cuando:

select (column_name is not null) as result from table_name;

Devuelve 1 para todos los campos que no sean NULL y 0 para todos los campos que son NULL, que es lo más cercano a booleanos en SQL.

SELECT 
    CASE
        WHEN thevalue IS NULL THEN 0
        ELSE 1
    END AS newVal
FROM .... (rest of select)

Creo que es algo como esto

En realidad, es posible que el ISNULL, sea CUANDO el valor sea NULL ENTONCES 0

Suponiendo que desea un valor de 0,1 como una devolución, y que estamos hablando de un entero, usaría la lógica especificada por Torbjörn y envuélvalo en la función

create function dbo.isNotNull(@a int)
returns bit
as
begin
return isnull(@a-@a+1,0)
end

para que luego puedas usarlo cuando lo necesites simplemente llamando

select dbo.isNotNull(myIntColumn) from myTable

La respuesta proporcionada por Tomalak es más universal, ya que funcionaría con cualquier tipo de datos

Es posible que desee realizar una conversión (BIT, valor) de su resultado. Porque algo SQL devolverá un error que indica que el valor no es un valor booleano.

isnull(column - column + 1, 0) != 0

En Oracle, asumiendo que usas 0 para falso y 1 para verdadero: -

SELECT DECODE( col, NULL, 0, 1) FROM ...

También puede escribir esto usando la sintaxis de CASE, pero lo anterior es idiomático en Oracle. DECODE es un poco como un interruptor / caja; si col es NULL, entonces se devuelve 0, de lo contrario 1.

El más corto que conozco para Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2 (value, ifNotNull, ifNull) devuelve ifNotNull si el value no es nulo, y ifNull de lo contrario.

Por lo general, cuando se usa 1, significa que es verdadero y en otros casos.

Entonces:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top