我正在做一个从 MySQL 迁移到 PostgreSQL 的项目,有些函数在 PostgreSQL 中不能很好地工作,比如 IFNULL
函数。有的教程说在PostgreSQL中我们可以使用NULLIF
来处理。
当我尝试时遇到问题“NOT 的参数必须是 bool 类型,而不是整数类型
”。
这是简单的 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 不适用于 bool 文字。这就是您收到错误的原因:
argument of NOT must be type boolean, not type integer
如果 column_a
是一个整数,那么您必须将其转换为 boolean
。这就是上面示例中的 column_a::boolean
所做的。它等效于 CAST(column_a AS boolean)
。
关于mysql - IFNULL() 等价于 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49042477/