postgres 中的 sqlite IFNULL()

sqlite IFNULL() in postgres

Postgres 中 SQLite 的 IFNULL() 相当于什么?

我必须执行以下查询(Ruby 中的 sqlite):

SELECT ifnull(max(code_id) + 1, 1) 
FROM configentries 
WHERE configtable_id = ...

如果我想用 PostgreSQL 得到相同的结果,这应该是什么样子?

try coalesce:

The COALESCE function returns the first of its arguments that is not null. Null is returned only if all arguments are null

SELECT coalesce(max(code_id) + 1, 1) 
FROM configentries 
WHERE configtable_id = ...

试试这个,

Select NULLIF(Max(code_id), 0) +1 
from  configentries 
WHERE configtable_id = ...

所有答案都很好,但只适用于只返回一行的情况。

如果您想查询多行并在找到 0 行时接收默认值,您可以使用:

SELECT example_field from "example_table" WHERE attribute='x'
UNION 
SELECT 'my_default_value' FROM  "example_table"  WHERE 
(SELECT example_field from "example_table" WHERE attribute='x'  LIMIT 1) is NULL

简短的回答是 COALESCE 函数是您可以在 postgres 中使用的。

COALESCE 优于 IFNULL 有几个原因:

  • COALESCE 是标准的 SQL 函数(在~每个 RDBMS 中实现),而 IFNULL 不是标准的,即使被广泛使用。
  • COALESCE 可以处理两个以上的操作数。它 returns 第一个 non-NULL 值。例如,COALESCE(NULL, 'a', NULL) returns aIFNULL 不能这样做。