SQLite相当于ISNULL(),NVL(),IFNULL()或COALESCE()

时间:2009-04-28 18:57:21

标签: .net sqlite dbnull

我想避免在我的代码中进行如下的许多检查:

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

我想我可以让我的查询通过执行以下操作来处理空值:

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

我正在使用SQLite,但它似乎无法识别isnull函数。我还尝试过在其他数据库(NVL()IFNULL()COALESCE())中识别的一些等效的,但SQLite似乎没有认出它们。

有没有人有任何建议或知道更好的方法来做到这一点。不幸的是,数据库没有所有字段的默认值。另外,在某些情况下我需要使用一些LEFT JOIN子句,其中返回的某些字段将为null,因为LEFT JOIN表中的匹配记录将不存在。

6 个答案:

答案 0 :(得分:119)

IFNULL ,请参见此处:http://www.sqlite.org/lang_corefunc.html#ifnull

功能

周围没有括号

答案 1 :(得分:35)

试试这个

ifnull(X,Y)  

例如

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

ifnull()函数返回其第一个非NULL参数的副本,如果两个参数都为NULL,则返回NULL。 Ifnull()必须有两个参数。 ifnull()函数相当于带有两个参数的coalesce()

答案 2 :(得分:23)

如果没有ISNULL()方法,则可以改为使用此表达式:

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END

这与ISNULL(fieldname, 0)的作用相同。

答案 3 :(得分:2)

在WHERE子句中使用IS NULLIS NOT NULL而不是ISNULL()方法:

SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL

答案 4 :(得分:1)

对于等效的NVL()和ISNULL(),请使用:

IFNULL(column, altValue)

column:您要评估的列。

altValue:如果'column'为null,则要返回的值。

示例:

SELECT IFNULL(middle_name, 'N/A') FROM person;

*注意:COALESCE()函数的工作方式与其他数据库相同。

来源:

答案 5 :(得分:-3)

您可以轻松定义此类功能并使用它:

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

或相同的缩小版本:

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