Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql PostgreSQL中的IFNULL()等价项_Mysql_Postgresql_Database Migration_Ifnull_Nullif - Fatal编程技术网

Mysql PostgreSQL中的IFNULL()等价项

Mysql PostgreSQL中的IFNULL()等价项,mysql,postgresql,database-migration,ifnull,nullif,Mysql,Postgresql,Database Migration,Ifnull,Nullif,我正在做一个从MySQL迁移到PostgreSQL的项目,有些函数在PostgreSQL中不能很好地工作,比如IFNULLfunction。一些教程说,在PostgreSQL中,我们可以使用NULLIF来处理它。 当我尝试时,我遇到了一个问题“的参数NOT必须是boolean类型,而不是integer类型” 这是一个简单的SQL: SELECT * FROM `tableA` WHERE not(nullif(columnA, 0)); 如何解决?也许有人可以解释一下它是如何工作的。谢谢NUL

我正在做一个从MySQL迁移到PostgreSQL的项目,有些函数在PostgreSQL中不能很好地工作,比如
IFNULL
function。一些教程说,在PostgreSQL中,我们可以使用
NULLIF
来处理它。 当我尝试时,我遇到了一个问题“
的参数NOT必须是boolean类型,而不是integer类型

这是一个简单的SQL:

SELECT * FROM `tableA` WHERE not(nullif(columnA, 0));
如何解决?也许有人可以解释一下它是如何工作的。谢谢

NULLIF()与IFNULL()非常不同。我认为您需要的是COALESCE(),它将返回第一个非NULL参数(它可以有两个以上的参数):

参考:

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

NOT的参数必须是boolean类型,而不是integer类型


如果
列a
是一个整数,则必须将其强制转换为
布尔值。这就是上面示例中的
列a::boolean
所做的。它相当于
CAST(列a为布尔值)

nullif在两个参数相等时返回null,否则将返回给定的第一个参数。您的“not(nullif(columnA,0))”将被评估为“not(null)”或“not(columnA)”,这并不是您的意思。感谢@Stacking For Heap,我终于可以理解它是如何工作的。太好了,请接受我的建议answer@laurenz-虽然这正是我写的如果你读我的答案,还有OP。OP正在寻找一个类似于
IFNULL()
Thank@isapir的函数,你的答案正是我需要的。当我按照您所说的进行尝试时,我可以看到不同之处,特别是脚本执行时的持续时间。
SELECT * 
FROM   table_a
WHERE  NOT (COALESCE(column_a::boolean, false));