假设一个带有整数列的sqlite数据库。
现在,趋势是整数字段也包含NULL值(= unset)。
我想在对该字段进行查询时将NULL值解释为零(0)。
有没有办法告诉sqlite我喜欢在这种情况下像0一样处理NULL,尤其是当我使用SELECT语句进行比较时?
由于我使用类似C的代码动态构造查询,我希望能够编写类似这样的内容:
query = "SELECT * FROM tbl WHERE intField=" + IntToStr(anIntValue)
目前,我使用以下代码解决此问题,我希望避免使用此代码:
if (anIntValue == 0) {
query = "SELECT * FROM tbl WHERE intField IS NULL OR intField=0"
} else {
query = "SELECT * FROM tbl WHERE intField=" + IntToStr(anIntValue)
}
也许我可以在查询中使用一个运算符,将NULL转换为我指定的其他值?
当然,另一种方法是确保一个永远不会在该字段中以NULL值结束,但是人们可能希望能够告诉该值何时尚未设置,所以我喜欢成为能够在数据库中保留NULL值。
答案 0 :(得分:4)
在标准SQL中,这称为COALESCE
:
COALESCE(col, 0)
为什么使用像IFNULL / NVL这样的专有扩展,如果每个DBMS都支持一个标准?
答案 1 :(得分:2)
请尝试ifnull
功能,请参阅http://www.sqlite.org/lang_corefunc.html#ifnull
答案 2 :(得分:1)
您可以使用 IFNULL 或
CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END
这与isnull(fieldname, 0)
您可以阅读更多here
答案 3 :(得分:1)
虽然您可以使用RDBMS的空合并功能,但是存在一种通用方法,允许您在条件中将NULL
视为零,如下所示:
String val = IntToStr(anIntValue)
"SELECT * FROM tbl WHERE intField=" + val + " OR (0="+ val+" AND intField IS NULL)"