programacion - isnull sqlserver
¿Cuál es la mejor manera de convertir un valor int o null a boolean en una consulta SQL? (9)
¿Cuál es la mejor manera de convertir un valor int o null a boolean en una consulta SQL, de modo que:
- Cualquier valor no nulo es VERDADERO en los resultados
- Cualquier valor nulo es FALSO en los resultados
Es posible que desee hacer una conversión (BIT, valor) de su resultado. Porque algo SQL devolverá un error de que el valor no es un booleano.
No es necesario usar el caso ... cuando:
select (column_name is not null) as result from table_name;
Devuelve 1 para todos los campos no NULL y 0 para todos los campos que son NULL, que es lo más cercano que se puede obtener a los booleanos en SQL.
Que yo sepa (corríjanme si estoy equivocado), no hay ningún concepto de valores booleanos literales en SQL. Puede tener expresiones que evalúen valores booleanos, pero no puede generarlos.
Dicho esto, puede usar CASE WHEN para generar un valor que pueda usar en una comparación:
SELECT
CASE WHEN ValueColumn IS NULL THEN ''FALSE'' ELSE ''TRUE'' END BooleanOutput
FROM
table
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, ISNULL, puede necesitar ser CUANDO thevalue IS NULL THEN 0
isnull(column - column + 1, 0) != 0
En Oracle, suponiendo que usa 0 para falso y 1 para verdadero: -
SELECT DECODE( col, NULL, 0, 1) FROM ...
También puede escribir esto usando la sintaxis CASE, pero lo anterior es idiomático en Oracle. DECODE es un poco como un interruptor / caja; si col es NULL, se devuelve 0, sino 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
caso contrario.
Por lo general, cuando se usa 1, significa que es verdadero y de lo contrario en otro caso.
Asi que:
SELECT IsDefault = CASE WHEN IsDefault = 1 THEN ''true'' ELSE ''false'' END
FROM table
Asumiendo que quiere un valor de 0.1 como retorno, y que estamos hablando de un entero, usaría la lógica especificada por Torbjörn y la incluiría en la función
create function dbo.isNotNull(@a int)
returns bit
as
begin
return isnull(@a-@a+1,0)
end
entonces puede usarlo cuando lo necesite 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