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

Jas*_*own 85 .net sqlite dbnull

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

myObj.someStringField = rdr.IsDBNull(someOrdinal) 
                            ? string.Empty 
                            : rdr.GetString(someOrdinal);
Run Code Online (Sandbox Code Playgroud)

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

SELECT myField1, [isnull](myField1, '') 
FROM myTable1
WHERE myField1 = someCondition
Run Code Online (Sandbox Code Playgroud)

我虽然使用SQLite,但似乎没有认识到这个isnull功能.我也试过其他数据库中的一些公认的那些等效(NVL(),IFNULL()COALESCE()),但SQLite的似乎不认识任何人.

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

SQL*_*ace 121

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

功能周围没有括号

  • 我意识到你对“函数周围没有括号”的描述引用了这个问题,但是有了这样的陈述,在你最初的陈述下面有一个例子会有所帮助。 (2认同)

Har*_*rji 38

试试这个

ifnull(X,Y)  
Run Code Online (Sandbox Code Playgroud)

例如

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

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


小智 24

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

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END
Run Code Online (Sandbox Code Playgroud)

这与以下相同ISNULL(fieldname, 0).

  • @sethflowers我可以看到以更RDBMS中立的方式实现null默认值的值,但这是对另一个问题的答案。:) OP仅要求在其他系统中使用SQLite等同于`isnull`,而我不想鼓励人们“自己动手”。 (2认同)

lew*_*dev 9

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

IFNULL(column, altValue)

column:您正在评估的列。

altValue:当“column”为空时要返回的值。

例子:

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

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

资料来源:


Thi*_*ilo 6

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

SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

  • 这与所问的内容无关。OP 不想过滤掉“myField1”具有非空值的行,如果行值为空,他希望用不同的值替换结果列中的值。 (3认同)