SQLite equivalente a ISNULL (), NVL (), IFNULL () o COALESCE ()
Pregunta
Me gustaría evitar tener muchos controles como el siguiente en mi código:
myObj.someStringField = rdr.IsDBNull(someOrdinal)
? string.Empty
: rdr.GetString(someOrdinal);
pensé que sólo podía tener mi consulta cuidar de los nulos haciendo algo como esto:
SELECT myField1, [isnull](myField1, '')
FROM myTable1
WHERE myField1 = someCondition
Estoy usando SQLite y aunque no parece reconocer la función isnull
. También he intentado algunas otras equivalentes reconocidas en otras bases de datos (NVL()
, IFNULL()
y COALESCE()
), pero SQLite no parece reconocer a ninguno de ellos.
¿Alguien tiene alguna sugerencia o sabe de una mejor manera de hacer esto. Por desgracia, la base de datos no tiene valores por defecto para todos los campos. Además, tengo que utilizar algunas cláusulas LEFT JOIN
en algunos casos, en los que algunos de los campos devueltos serán nulos porque no existirá el registro coincidente en la tabla LEFT JOIN
.
Solución
IFNULL
, ver aquí: http: //www.sqlite. org / lang_corefunc.html # IFNULL
sin paréntesis angulares de la función
Otros consejos
Probar
ifnull(X,Y)
por ejemplo
select ifnull(InfoDetail,'') InfoDetail; -- this will replace null with ''
select ifnull(NULL,'THIS IS NULL');-- More clearly....
La función ifnull()
devuelve una copia de su primer argumento no NULL, o NULL si ambos argumentos son NULL. Ifnull()
debe tener exactamente 2 argumentos. La función ifnull()
es equivalente a coalesce()
con dos argumentos.
Si no hay método ISNULL()
, puede utilizar esta expresión en su lugar:
CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END
Esto funciona igual que ISNULL(fieldname, 0)
.
Utilice IS NULL
o IS NOT NULL
en cláusula WHERE en lugar de ISNULL () Método:
SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL
Para el equivalente de NVL () y ISNULL () Uso:
IFNULL(column, altValue)
column
:. La columna está evaluando
altValue
:. El valor que desea devolver si 'columna' es nulo
Ejemplo:
SELECT IFNULL(middle_name, 'N/A') FROM person;
* Nota: La función COALESCE () funciona de la misma como lo hace con otras bases de datos.
Fuentes:
- COALESCE () Función (w3schools)
- SQL tal como lo entiende SQLite (página web SQLite)
Puede definir fácilmente dicha función y luego usarlo:
ifnull <- function(x,y) {
if(is.na(x)==TRUE)
return (y)
else
return (x);
}
o misma versión miniaturizada:
ifnull <- function(x,y) {if(is.na(x)==TRUE) return (y) else return (x);}