¿Cuál es la mejor manera de convertir un valor int o nulo a booleano en una consulta SQL?
-
05-07-2019 - |
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
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