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

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

SELECT ISNULL(Field,'Empty') from Table

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

5 ответов


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

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

SELECT coalesce(field, 'Empty') AS field_alias

использовать COALESCE() вместо:

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

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

SELECT COALESCE(null, null, 5); 

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

SELECT COALESCE(null, 2, 5);

возвращает 2

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


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

SELECT (Field IS NULL) FROM ...

попробуй:

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

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

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

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

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