有没有一种方法可以使NULL的行为类似于0(零)或SQL中的空字符串?

有没有一种方法可以使NULL的行为类似于0(零)或SQL中的空字符串?,sql,sqlite,Sql,Sqlite,假设sqlite数据库具有整数列 现在,整数字段往往也包含空值(=unset) 在对该字段进行查询时,我希望将空值解释为零(0) 有没有办法告诉sqlite,在这种情况下,我喜欢像0一样处理NULL,特别是当我使用SELECT语句进行比较时 由于我在类似C的代码中动态构造查询,因此我希望能够编写如下内容: query = "SELECT * FROM tbl WHERE intField=" + IntToStr(anIntValue) String val = IntToStr(anIntV

假设sqlite数据库具有整数列

现在,整数字段往往也包含空值(=unset)

在对该字段进行查询时,我希望将空值解释为零(0)

有没有办法告诉sqlite,在这种情况下,我喜欢像0一样处理NULL,特别是当我使用SELECT语句进行比较时

由于我在类似C的代码中动态构造查询,因此我希望能够编写如下内容:

query = "SELECT * FROM tbl WHERE intField=" + IntToStr(anIntValue)
String val = IntToStr(anIntValue)
"SELECT * FROM tbl WHERE intField=" + val + " OR (0="+ val+" AND intField IS NULL)"
目前,我使用以下代码来解决此问题,我希望避免:

if (anIntValue == 0) {
  query = "SELECT * FROM tbl WHERE intField IS NULL OR intField=0"
} else {
  query = "SELECT * FROM tbl WHERE intField=" + IntToStr(anIntValue)
}
也许我可以在查询中使用一个运算符,将空值转换为我指定的其他值


当然,另一种方法是确保在该字段中永远不会出现空值,但人们可能希望能够知道何时还没有设置该值,因此我希望能够将空值保留在数据库中。

请尝试
ifnull
函数,请参阅doc at

请尝试
ifnull
函数,参见文档,网址为您可以使用

这与
isnull(fieldname,0)

你可以阅读更多内容,你可以使用 或

这与
isnull(fieldname,0)


您可以在标准SQL中阅读更多内容,这称为
合并

COALESCE(col, 0)

如果每个DBMS都支持一个标准,那么为什么要使用像IFNULL/NVL这样的专有扩展呢?

在标准SQL中,这被称为
COALESCE

COALESCE(col, 0)

如果每个DBMS都支持一个标准,为什么要使用像IFNULL/NVL这样的专有扩展?

尽管您可以使用RDBMS的null合并功能,但存在一种通用方法,允许您在某种条件下将
null
s视为零,如下所示:

query = "SELECT * FROM tbl WHERE intField=" + IntToStr(anIntValue)
String val = IntToStr(anIntValue)
"SELECT * FROM tbl WHERE intField=" + val + " OR (0="+ val+" AND intField IS NULL)"

尽管您可以使用RDBMS的空合并功能,但存在一种通用方法,允许您在某种条件下将
null
s视为零,如下所示:

query = "SELECT * FROM tbl WHERE intField=" + IntToStr(anIntValue)
String val = IntToStr(anIntValue)
"SELECT * FROM tbl WHERE intField=" + val + " OR (0="+ val+" AND intField IS NULL)"

查看此处返回序列中的第一个非空值。查看此处返回序列中的第一个非空值。删除我的答案-这相当于SQL Server的
IsNull
。删除我的答案-这相当于SQL Server的
IsNull
。当我飞过文档时,我从未理解COALESCE的意思,现在我终于做到了:)当我飞过文档时,我从来都不明白COALESCE是什么意思,现在我终于做到了:)