SQLite equivalente a ISNULL (), NVL (), IFNULL () o COALESCE ()
Domanda
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 ho potuto solo avere la mia domanda prendersi cura dei valori nulli facendo qualcosa di simile a questo:
SELECT myField1, [isnull](myField1, '')
FROM myTable1
WHERE myField1 = someCondition
Sto usando SQLite e anche se non sembra riconoscere la funzione di isnull
. Ho anche provato alcuni tra quelli equivalenti riconosciute in altre banche dati (NVL()
, IFNULL()
e COALESCE()
), ma SQLite non sembra riconoscere nessuno di loro.
Qualcuno ha qualche suggerimento o sa di un modo migliore per farlo. Purtroppo il database non ha valori di default per tutti i campi. Inoltre, ho bisogno di usare alcune clausole LEFT JOIN
in alcuni casi, in cui alcuni dei campi restituiti saranno nulli perché il record corrispondente nella tabella LEFT JOIN
non esisterà.
Soluzione
IFNULL
, vedere qui: http: //www.sqlite. org / lang_corefunc.html # IFNULL
Non ci sono parentesi intorno alla funzione
Altri suggerimenti
Prova questo
ifnull(X,Y)
es
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 c'è il metodo ISNULL()
, è possibile utilizzare questa espressione, invece:
CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END
Questo funziona allo stesso modo ISNULL(fieldname, 0)
.
Utilizzare IS NULL
o IS NOT NULL
in WHERE clausola invece di ISNULL () Metodo:
SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL
Per l'equivalente di NVL () e ISNULL () utilizzare:
IFNULL(column, altValue)
column
:. La colonna si sta valutando
altValue
:. Il valore che si desidera tornare se 'colonna' è nullo
Esempio:
SELECT IFNULL(middle_name, 'N/A') FROM person;
* Nota: La funzione COALESCE () funziona esattamente come avviene per altri database.
Fonti:
- COALESCE () Funzione (w3schools)
- SQL come inteso da SQLite (sito SQLite)
Si può facilmente definire tale funzione e usarlo poi:
ifnull <- function(x,y) {
if(is.na(x)==TRUE)
return (y)
else
return (x);
}
o stessa versione minified:
ifnull <- function(x,y) {if(is.na(x)==TRUE) return (y) else return (x);}