IFNULL() Эквивалент в PostgreSQL

Я работаю над проектом перехода с 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));

Как это решить? Может быть, кто-то может объяснить, как это работает хорошо. Спасибо

1 ответ

NULLIF() очень отличается от IFNULL(). Я думаю, что вам нужно COALESCE(), который будет возвращать первый ненулевой аргумент (он может иметь более 2 аргументов):

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

Ссылка: 9.17.2. COALESCE

Также в Postgres нужно использовать true или же false, 0 и 1 не работают для логических литералов. Вот причина, по которой вы получаете ошибку:

аргумент NOT должен иметь тип логический, а не тип целое

Если column_a является целым числом, то вы должны CAST его к boolean, Это то что column_a::boolean в приведенном выше примере делает. Это эквивалентно CAST(column_a AS boolean),

Другие вопросы по тегам