IFNULL()等同于PostgreSQL

时间:2018-03-01 04:10:51

标签: mysql postgresql database-migration ifnull nullif

我正在开发一个从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));

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

1 个答案:

答案 0 :(得分: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)