SQLite äquivalent zu isnull (), nvl (), ifnull () oder coalesce ()
Frage
Ich möchte vermeiden, dass viele Schecks in meinem Code Folgendes wie Folgendes haben:
myObj.someStringField = rdr.IsDBNull(someOrdinal)
? string.Empty
: rdr.GetString(someOrdinal);
Ich dachte, ich könnte nur meine Anfrage um die Nulls kümmern, indem ich so etwas mache:
SELECT myField1, [isnull](myField1, '')
FROM myTable1
WHERE myField1 = someCondition
Ich benutze SQLite allerdings und es scheint das nicht zu erkennen isnull
Funktion. Ich habe auch einige äquivalente, die in anderen Datenbanken erkannt werden (NVL()
, IFNULL()
und COALESCE()
), aber SQLite scheint keinen von ihnen zu erkennen.
Hat jemand Vorschläge oder kennt einen besseren Weg, dies zu tun? Leider hat die Datenbank keine Standardwerte für alle Felder. Außerdem muss ich einige verwenden LEFT JOIN
Klauseln in einigen Fällen, in denen einige der zurückgegebenen Felder zurückgegeben werden LEFT JOIN
Tabelle wird nicht existieren.
Lösung
IFNULL
, siehe hier: http://www.sqlite.org/lang_corefunc.html#ifnull
Keine Klammern um die Funktion
Andere Tipps
Versuche dies
ifnull(X,Y)
z.B
select ifnull(InfoDetail,'') InfoDetail; -- this will replace null with ''
select ifnull(NULL,'THIS IS NULL');-- More clearly....
Das ifnull()
Die Funktion gibt eine Kopie ihres ersten Nicht-Null-Arguments zurück oder null, wenn beide Argumente null sind. Ifnull()
Muss genau 2 Argumente haben. Das ifnull()
Funktion entspricht zu coalesce()
mit zwei Argumenten.
Wenn es nicht gibt ISNULL()
Methode können Sie diesen Ausdruck stattdessen verwenden:
CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END
Dies funktioniert genauso wie ISNULL(fieldname, 0)
.
Verwenden IS NULL
oder IS NOT NULL
In where-Klausel anstelle von isnull () Methode:
SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL
Für das Äquivalent von nvl () und isnull () Verwendung:
IFNULL(column, altValue)
column
: Die Spalte, die Sie bewerten.
altValue
: Der Wert, den Sie zurückgeben möchten, wenn 'Spalte' null ist.
Beispiel:
SELECT IFNULL(middle_name, 'N/A') FROM person;
*Hinweis: Die Funktion coalesce () funktioniert genauso wie für andere Datenbanken.
Quellen:
- Koalesce () -Funktion (W3schools)
- SQL, wie von SQLite verstanden (SQLite -Website)
Sie können diese Funktion leicht definieren und dann verwenden:
ifnull <- function(x,y) {
if(is.na(x)==TRUE)
return (y)
else
return (x);
}
oder gleiche abgebildete Version:
ifnull <- function(x,y) {if(is.na(x)==TRUE) return (y) else return (x);}