我正在开发一个从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));
如何解决?也许有人可以解释它是如何运作良好的。感谢
答案 0 :(得分:2)
NULLIF()与IFNULL()非常不同。我认为你想要的是COALESCE(),它将返回第一个非NULL参数(它可以有两个以上的参数):
SELECT *
FROM table_a
WHERE NOT (COALESCE(column_a::boolean, false));
此外,在Postgres中,您需要使用true
或false
。 0和1不适用于布尔文字。这就是你得到错误的原因:
NOT的参数必须是boolean类型,而不是类型integer
如果column_a
是一个整数,那么你必须将它CAST到boolean
。这就是上面示例中column_a::boolean
的作用。它相当于CAST(column_a AS boolean)
。