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

192

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

SELECT ISNULL(Field,'Empty') from Table

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

  • 1
    Нет, вы не можете сделать это в MSSQL. Этот код не будет компилироваться. ISNULL принимает два аргумента и возвращает второй, если первый равен null , иначе первый.
  • 0
    @ Серг, ты прав. исправил это.
Показать ещё 1 комментарий
Теги:
sql-server
null

5 ответов

309
Лучший ответ
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias

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

SELECT coalesce(field, 'Empty') AS field_alias
  • 47
    +1 для coalesce . (PS Вы можете сделать это и в MS SQL Server.)
  • 2
    Есть и другие случаи использования IS NULL, поэтому полезно знать оба.
Показать ещё 6 комментариев
57

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

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

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

SELECT COALESCE(null, null, 5); 

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

SELECT COALESCE(null, 2, 5);

возвращает 2

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

16

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

SELECT (Field IS NULL) FROM ...
  • 4
    Это эмулирует точную функциональность isnull, но не уверен, почему он отклонен
  • 6
    @artur Вы не понимаете, как работает isnull.
Показать ещё 6 комментариев
10

Try:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name
  • 2
    Это хорошо, поскольку охватывает случай, когда текстовое поле НЕ пустое, но также «пустое».
-6

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

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'

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

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

  • 26
    Пожалуйста, никто не делает этого. Вместо этого используйте coalesce (), чтобы ваш администратор БД не ненавидел вас.
  • 0
    postgres, пожалуйста, добавьте isnull, чтобы никто никого не ненавидел.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню