Sqlite equivalente a iSnull (), nvl (), ifnull () ou coalesce ()
Pergunta
Eu gostaria de evitar ter muitos cheques como o seguinte no meu código:
myObj.someStringField = rdr.IsDBNull(someOrdinal)
? string.Empty
: rdr.GetString(someOrdinal);
Achei que poderia apenas ter minha consulta cuidar dos nulos, fazendo algo assim:
SELECT myField1, [isnull](myField1, '')
FROM myTable1
WHERE myField1 = someCondition
Estou usando o sqlite e não parece reconhecer o isnull
função. Eu também tentei alguns equivalentes reconhecidos em outros bancos de dados (NVL()
, IFNULL()
e COALESCE()
), mas Sqlite não parece reconhecer nenhum deles.
Alguém tem alguma sugestão ou conhece uma maneira melhor de fazer isso. Infelizmente, o banco de dados não possui valores padrão para todos os campos. Além disso, eu preciso usar alguns LEFT JOIN
cláusulas em alguns casos, onde alguns dos campos retornados serão nulos porque o registro correspondente no LEFT JOIN
Tabela não existirá.
Solução
IFNULL
, Veja aqui: http://www.sqlite.org/lang_corefunc.html#ifnull
Sem suportes em torno da função
Outras dicas
Tente isso
ifnull(X,Y)
por exemplo
select ifnull(InfoDetail,'') InfoDetail; -- this will replace null with ''
select ifnull(NULL,'THIS IS NULL');-- More clearly....
o ifnull()
A função retorna uma cópia de seu primeiro argumento não nulo, ou nulo se ambos os argumentos forem nulos. Ifnull()
Deve ter exatamente 2 argumentos. o ifnull()
A função é equivalente a coalesce()
com dois argumentos.
Se não houver ISNULL()
Método, você pode usar esta expressão:
CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END
Isso funciona da mesma forma que ISNULL(fieldname, 0)
.
Usar IS NULL
ou IS NOT NULL
em onde cláusula em vez do método isnull ():
SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL
Para o equivalente a NVL () e ISNULL () Use:
IFNULL(column, altValue)
column
: A coluna que você está avaliando.
altValue
: O valor que você deseja retornar se 'coluna' for nulo.
Exemplo:
SELECT IFNULL(middle_name, 'N/A') FROM person;
*Nota: a função Coalesce () funciona da mesma forma para outros bancos de dados.
Fontes:
- Função coalesce () (W3Schools)
- SQL conforme entendido por SQLite (Site SQLite)
Você pode definir facilmente essa função e usá -la então:
ifnull <- function(x,y) {
if(is.na(x)==TRUE)
return (y)
else
return (x);
}
ou a mesma versão minificada:
ifnull <- function(x,y) {if(is.na(x)==TRUE) return (y) else return (x);}