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));
Также в Postgres нужно использовать true
или же false
, 0 и 1 не работают для логических литералов. Вот причина, по которой вы получаете ошибку:
аргумент NOT должен иметь тип логический, а не тип целое
Если column_a
является целым числом, то вы должны CAST его к boolean
, Это то что column_a::boolean
в приведенном выше примере делает. Это эквивалентно CAST(column_a AS boolean)
,