mysql - IFNULL() 等价于 PostgreSQL

标签 mysql sql postgresql ifnull nullif

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

引用:9.17.2. COALESCE

此外,在 Postgres 中,您需要使用 truefalse。 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/

相关文章:

php - 如何从数据库中删除除大列表之外的所有文件?

c# - 使用 SQL 更新 250k 行的更快方法

java - 如何通过 Hibernate 在 PostgreSQL 中保存数据期间修复 "ERROR: Invalid endian flag value encountered."

ruby-on-rails - 如何使用两个搜索文本参数进行 postgres 搜索,Search FILter text 1 && search filter text 2

mysql - 我们可以在游标 SQL 函数中使用声明数据类型为 TIMESTAMP 的局部变量吗?

mysql - 从 SKU 获取永久链接

mysql - 如何在第二次查询后在 Joomla 中使用 getNumRows()

mysql - 将行值添加到总计 if 条件(不知道如何问这个)

sql - 如何在Hive中格式化yyyy-MMMM?

sql - 如何找到正在使用函数的位置