99

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

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

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

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

虽然我正在使用 SQLite,但它似乎无法识别该isnull功能。我还尝试了一些在其他数据库(和)中识别的等效数据库NVL(),但 SQLite 似乎无法识别它们中的任何一个。IFNULL()COALESCE()

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

4

6 回答 6

140

IFNULL,见这里:http ://www.sqlite.org/lang_corefunc.html#ifnull

函数周围没有括号

于 2009-04-28T19:03:55.630 回答
45

尝试这个

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()必须恰好有 2 个参数。该ifnull()函数等效于coalesce()带有两个参数。

于 2013-06-24T11:50:57.127 回答
30

如果没有ISNULL()方法,你可以使用这个表达式来代替:

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END

这与ISNULL(fieldname, 0).

于 2010-12-19T12:45:28.140 回答
5

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

IFNULL(column, altValue)

column:您正在评估的列。

altValue: 如果 'column' 为空,您要返回的值。

例子:

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

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

资料来源:

于 2018-10-11T20:56:37.947 回答
4

在 WHERE 子句中使用IS NULLorIS NOT NULL代替 ISNULL() 方法:

SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL
于 2016-07-06T07:24:14.200 回答
-5

您可以轻松定义此类函数并使用它:

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);}
于 2015-04-18T04:38:40.467 回答