SQLite equivalente a ISNULL (), NVL (), IFNULL () o COALESCE ()

Mi piacerebbe evitare di avere molti controlli come il seguente nel mio codice:

myObj.someStringField = rdr.IsDBNull(someOrdinal) ? string.Empty : rdr.GetString(someOrdinal); 

Ho pensato che avrei potuto fare in modo che la mia query si occupasse dei null facendo qualcosa del genere:

 SELECT myField1, [isnull](myField1, '') FROM myTable1 WHERE myField1 = someCondition 

Sto usando SQLite e non sembra riconoscere la funzione isnull . Ho anche provato alcuni equivalenti riconosciuti in altri database ( NVL() , IFNULL() e COALESCE() ), ma SQLite non sembra riconoscerne nessuno.

Qualcuno ha qualche suggerimento o sa di un modo migliore per farlo. Sfortunatamente il database non ha valori predefiniti per tutti i campi. Inoltre, ho bisogno di utilizzare alcune clausole LEFT JOIN in alcuni casi, in cui alcuni dei campi restituiti saranno nulli perché il record corrispondente nella tabella LEFT JOIN non esiste.

IFNULL , vedi qui: http://www.sqlite.org/lang_corefunc.html#ifnull

nessuna parentesi attorno alla funzione

Prova questo

 ifnull(X,Y) 

per esempio

 select ifnull(InfoDetail,'') InfoDetail; -- this will replace null with '' select ifnull(NULL,'THIS IS NULL');-- More clearly.... 

La funzione ifnull() restituisce una copia del suo primo argomento non NULL o NULL se entrambi gli argomenti sono NULL. Ifnull() deve avere esattamente 2 argomenti. La funzione ifnull() è equivalente a coalesce() con due argomenti.

Se non ISNULL() metodo ISNULL() , puoi utilizzare questa espressione:

 CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END 

Funziona come ISNULL(fieldname, 0) .

Utilizzare IS NULL o IS NOT NULL nella clausola WHERE anziché in ISNULL ():

 SELECT myField1 FROM myTable1 WHERE myField1 IS NOT NULL 

Puoi facilmente definire tale funzione e usarla quindi:

 ifnull <- function(x,y) { if(is.na(x)==TRUE) return (y) else return (x); } 

o la stessa versione minificata:

 ifnull <- function(x,y) {if(is.na(x)==TRUE) return (y) else return (x);}