tipos sqlserver programacion not generador ejemplo datos convert conversion consultas cast sql null boolean type-conversion

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