我正在研究一个从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));
怎么解决?也许有人可以解释它是如何运作良好的。谢谢
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)
。