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 a
。 IFNULL
不能这样做。
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)
returnsa
。IFNULL
不能这样做。