Qual é a melhor maneira de converter um int ou nulo para valor booleano em uma consulta SQL?
-
05-07-2019 - |
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
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