Что такое эквивалент PostgreSQL для ISNULL()

В MS SQL-Server я могу сделать:

SELECT ISNULL(Field,'Empty') from Table

Но в PostgreSQL я получаю синтаксическую ошибку. Как эмулировать функциональность ISNULL()?

Ответ 1

SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias

Или более идиоматично:

SELECT coalesce(field, 'Empty') AS field_alias

Ответ 2

Вместо этого используйте COALESCE():

SELECT COALESCE(Field,'Empty') from Table;

Он функционирует так же, как ISNULL, хотя и обеспечивает большую функциональность. Coalesce вернет первое ненулевое значение в списке. Таким образом:

SELECT COALESCE(null, null, 5); 

возвращает 5, а

SELECT COALESCE(null, 2, 5);

возвращает 2

Coalesce будет принимать большое количество аргументов. Нет документального максимума. Я тестировал, что будет 100 аргументов, и это удалось. Это должно быть достаточно для подавляющего большинства ситуаций.

Ответ 3

Как эмулировать функциональность ISNULL()?

SELECT (Field IS NULL) FROM ...

Ответ 4

Try:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name

Ответ 5

Создайте следующую функцию

CREATE OR REPLACE FUNCTION isnull(text, text) RETURNS text AS 'SELECT (CASE (SELECT $1 "
    "is null) WHEN true THEN $2 ELSE $1 END) AS RESULT' LANGUAGE 'sql'

И это сработает.

Вы можете создавать разные версии с разными типами параметров.