В MS SQL-Server я могу сделать:
SELECT ISNULL(Field,'Empty') from Table
Но в PostgreSQL я получаю синтаксическую ошибку. Как мне эмулировать ISNULL()
функциональность?
В MS SQL-Server я могу сделать:
SELECT ISNULL(Field,'Empty') from Table
Но в PostgreSQL я получаю синтаксическую ошибку. Как мне эмулировать ISNULL()
функциональность?
Ответы:
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias
Или более идиоматический:
SELECT coalesce(field, 'Empty') AS field_alias
coalesce
. (PS Вы можете сделать это и в MS SQL Server.)
coalesce
стандарт SQL, isnull
поскольку он является специфичной для MS функцией, которая, по сути, имеет coalesce
только два параметра.
Используйте COALESCE()
вместо этого:
SELECT COALESCE(Field,'Empty') from Table;
Он функционирует очень похоже ISNULL
, хотя и предоставляет больше функциональности. Coalesce вернет первое ненулевое значение в списке. Таким образом:
SELECT COALESCE(null, null, 5);
возвращает 5, а
SELECT COALESCE(null, 2, 5);
возвращает 2
Коалесци примет большое количество аргументов. Документированного максимума нет. Я проверил это будет 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 $1 "
"is null) WHEN true THEN $2 ELSE $1 END) AS RESULT' LANGUAGE 'sql'
И это сработает.
Вы можете создавать разные версии с разными типами параметров.
ISNULL
принимает два аргумента и возвращает второй - первыйnull
, иначе первый.