IFNULL()等同于PostgreSQL

问题描述 投票:1回答:1

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

这是简单的SQL:

SELECT * FROM `tableA` WHERE not(nullif(columnA, 0));

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

mysql postgresql database-migration ifnull nullif
1个回答
2
投票

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

SELECT * 
FROM   table_a
WHERE  NOT (COALESCE(column_a::boolean, false));

参考:9.17.2. COALESCE

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

NOT的参数必须是boolean类型,而不是类型integer

如果column_a是一个整数,那么你必须把它CAST到boolean。这就是上面例子中的column_a::boolean。它相当于CAST(column_a AS boolean)

© www.soinside.com 2019 - 2024. All rights reserved.