IFNULL() 等价于 PostgreSQL

Ugy*_*tro 3 mysql sql postgresql ifnull nullif

我正在做一个从 MySQL 迁移到 PostgreSQL 的项目,有些函数在 PostgreSQL 中不能很好地工作,比如IFNULL函数。有的教程说在PostgreSQL中我们可以用NULLIF它来处理。当我尝试时,我遇到了一个问题“ argument of NOT must be type boolean, not type integer”。

这是简单的 SQL:

SELECT * FROM `tableA` WHERE not(nullif(columnA, 0));
Run Code Online (Sandbox Code Playgroud)

如何解决?也许有人可以解释它如何运作良好。谢谢

isa*_*pir 5

NULLIF() 与 IFNULL() 非常不同。我认为你想要的是 COALESCE(),它将返回第一个非 NULL 参数(它可以有 2 个以上的参数):

SELECT * 
FROM   table_a
WHERE  NOT (COALESCE(column_a::boolean, false));
Run Code Online (Sandbox Code Playgroud)

参考:9.17.2。合并

此外,在 Postgres 中,您需要使用truefalse。0 和 1 不适用于布尔文字。这就是您收到错误的原因:

NOT 的参数必须是布尔类型,而不是整数类型

如果column_a是整数,则必须将其 CAST 为boolean. 这就是column_a::boolean上面例子中所做的。它相当于CAST(column_a AS boolean)