Qual è il modo migliore per convertire un valore int o null in valore booleano in una query SQL?

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

Domanda

Qual è il modo migliore per convertire un valore int o null in valore booleano in una query SQL, in modo che:

  • Qualsiasi valore non nullo è VERO nei risultati
  • Qualsiasi valore nullo è FALSO nei risultati
È stato utile?

Soluzione

Per quanto ne sappia (correggimi se sbaglio), non esiste un concetto di valori booleani letterali in SQL. Puoi avere espressioni che valutano valori booleani, ma non puoi generarli.

Detto questo, puoi usare CASE QUANDO per produrre un valore che puoi usare in un confronto:

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

Altri suggerimenti

Non è necessario utilizzare case ... quando:

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

Restituisce 1 per tutti i campi non NULL e 0 per tutti i campi NULL, il più vicino possibile ai booleani in SQL.

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

Penso che vada qualcosa del genere

In realtà, ISNULL, potrebbe essere necessario QUANDO il valore È NULL THEN 0

Supponendo che tu voglia 0,1 valore come ritorno e che stiamo parlando di numeri interi, userei la logica specificata da Torbjörn e racchiuderlo nella funzione

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

quindi puoi usarlo ogni volta che ti serve semplicemente chiamando

select dbo.isNotNull(myIntColumn) from myTable

La risposta fornita da Tomalak è più universale sebbene funzionerebbe con qualsiasi tipo di dati

Potresti voler fare un Convert (BIT, Value) del tuo risultato. Perché qualcosa di SQL restituirà un errore che il valore non è un valore booleano.

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

In Oracle, supponendo che tu usi 0 per false e 1 per true: -

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

Puoi anche scrivere questo usando la sintassi CASE, ma quanto sopra è idiomatico in Oracle. DECODE è un po 'come un interruttore / caso; se col è NULL, viene restituito 0, altrimenti 1.

Il più corto che conosco per Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2 (value, ifNotNull, ifNull) restituisce ifNotNull se il valore non è null e ifNull altrimenti.

Di solito quando si usa 1, significa che è vero e in altri casi.

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top