Qual é a melhor maneira de converter um int ou nulo para valor booleano em uma consulta SQL?

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

Pergunta

O que é a melhor maneira de converter um int ou nulo para valor booleano em uma consulta SQL, tal que:

  • Qualquer valor não nulo é true nos resultados
  • Qualquer valor nulo é false nos resultados
Foi útil?

Solução

Para o meu conhecimento (me corrija se eu estiver errado), não existe o conceito de valores booleanos literais em SQL. Você pode ter expressões que avaliam para valores booleanos, mas você não pode enviá-las.

Dito isto, você pode usar CASE WHEN para produzir um valor que você pode usar em uma comparação:

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

Outras dicas

Não há necessidade de caso de uso ... quando:

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

Retorna 1 para todos os campos não NULL e 0 para todos os campos que são NULL, que é o mais perto que você pode chegar ao booleans em SQL.

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

Eu acho que é algo como isto

Na verdade, o ISNULL, pode precisar de ser quando thevalue for nulo, 0

Assumindo que você quer 0,1 valor como um retorno, e que estamos a falar inteiro eu usaria a lógica especificada por Torbjörn e envolvê-la na função

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

sim, então você pode usá-lo sempre que precisar simplesmente chamando

select dbo.isNotNull(myIntColumn) from myTable

A resposta fornecida pelo Tomalak é mais universal embora como ele iria trabalhar com qualquer tipo de dados

Você pode querer fazer um Convert (BIT, Value) do seu resultado. Porque algo SQL retornará um erro que o valor não é um boolean.

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

Na Oracle, supondo que você use 0 para falso e 1 para verdadeiro: -

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

Você também pode escrever isso usando a sintaxe caso, mas o acima é idiomática em Oracle. DECODE é um pouco como um switch / case; Se col é NULL, em seguida, 0 é retornado, senão 1.

O mais curto que eu conheço para Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value, ifNotNull, ifNull) retornos ifNotNull se o value não é nulo, e ifNull contrário.

Normalmente, quando usar 1, isso significa que é verdadeiro e mais no outro caso.

Assim:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top