Что такое эквивалент PostgreSQL для ISNULL () - PullRequest
233 голосов
/ 06 февраля 2010

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

SELECT ISNULL(Field,'Empty') from Table

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

Ответы [ 5 ]

419 голосов
/ 06 февраля 2010
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias

Или более идиоматический:

SELECT coalesce(field, 'Empty') AS field_alias
72 голосов
/ 11 января 2012

Используйте COALESCE() вместо:

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

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

SELECT COALESCE(null, null, 5); 

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

SELECT COALESCE(null, 2, 5);

возвращает 2

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

23 голосов
/ 27 ноября 2012

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

SELECT (Field IS NULL) FROM ...
14 голосов
/ 26 августа 2013

Попробуйте:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name
0 голосов
/ 06 марта 2010

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

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'

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

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

...