3

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

这是简单的 SQL:

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

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

4

1 回答 1

5

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

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

参考:9.17.2。合并

此外,在 Postgres 中,您需要使用trueor false。0 和 1 不适用于布尔文字。这就是您收到错误的原因:

NOT 的参数必须是布尔类型,而不是整数类型

如果column_a是整数,则必须将其转换为boolean. 这就是column_a::boolean上面示例中所做的。它相当于CAST(column_a AS boolean)

于 2018-03-01T04:43:45.340 回答