我想避免在我的代码中进行如下的许多检查:
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
表中的匹配记录将不存在。
答案 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 NULL
或IS 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);}