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


Me gustaría evitar tener muchos controles como los siguientes en mi código:

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

Pensé que podría hacer que mi consulta se ocupara de los nulos haciendo algo como esto:

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

Aunque estoy usando SQLite y no parece reconocer el isnull función. También he probado algunos equivalentes reconocidos en otras bases de datos (NVL(), IFNULL() y COALESCE()), pero SQLite no parece reconocer ninguno de ellos.

¿Alguien tiene alguna sugerencia o sabe de una mejor manera de hacer esto? Lamentablemente, la base de datos no tiene valores predeterminados para todos los campos. Además, necesito usar algo LEFT JOIN cláusulas en algunos casos, donde algunos de los campos devueltos serán nulos porque el registro coincidente en el LEFT JOIN la mesa no existirá


74
2018-04-28 18:57


origen


Respuestas:


IFNULL, mira aquí: http://www.sqlite.org/lang_corefunc.html#ifnull

sin corchetes alrededor de la función


104
2018-04-28 19:03



Prueba esto

ifnull(X,Y)  

p.ej

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

los ifnull() función devuelve una copia de su primer argumento no nulo, o NULL si ambos argumentos son NULL. Ifnull() debe tener exactamente 2 argumentos los ifnull() la función es equivalente a coalesce() con dos argumentos


31
2018-06-24 11:50



Si no hay ISNULL() método, puede usar esta expresión en su lugar:

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END

Esto funciona igual que ISNULL(fieldname, 0).


18
2017-12-19 12:45



Utilizar IS NULL o IS NOT NULL en la cláusula WHERE en lugar del método ISNULL ():

SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL

2
2017-07-06 07:24



Puedes definir fácilmente tal función y usarla luego:

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

o la misma versión minimizada:

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

-2
2018-04-18 04:38