ISNULL ()에 해당하는 PostgreSQL은 무엇입니까


254

MS SQL-Server에서 다음을 수행 할 수 있습니다.

SELECT ISNULL(Field,'Empty') from Table

그러나 PostgreSQL에서 구문 오류가 발생합니다. 기능을 어떻게 에뮬레이트 ISNULL()합니까?


1
MSSQL에서는 그렇게 할 수 없습니다. 이 코드는 컴파일되지 않습니다. ISNULL두 개의 인수를 취하고 두 번째 인수는 첫 번째 is null이고 그렇지 않으면 첫 번째를 리턴합니다 .
— GSerg

@GSerg, 당신 말이 맞아요. 고쳤다.
— Byron Whitlock

Gserg와 Byron 예, 여기에서 볼 수 있습니다. dbo.Amonestacion a msdn.microsoft.com/en-us/library/ms184325.aspx
— Juan

답변:


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

또는 더 관용적 인 :

SELECT coalesce(field, 'Empty') AS field_alias

49
일에 대한 coalesce. (PS 당신은 MS SQL Server에서도 그렇게 할 수 있습니다.)
— Alison R.

2
IS NULL을 사용하는 다른 경우가 있으므로 둘 다 아는 것이 좋습니다.
— Kyle Butt

30
필자 는 기본적으로 두 개의 매개 변수 만 있는 MS 관련 함수이므로 coalesceSQL 표준이라는 점에 주목할 가치가 있다고 생각합니다 . isnullcoalesce
— GSerg

4
Coalesce ()는 형식 승격도 올바르게 처리하지만 (UNION SELECT와 동일) IsNull ()은 그렇지 않습니다.
— ErikE

2
ISNULL과 COALESCE가 동일하지 않음을 지적 할 가치가 있습니다. IsNull은 결과 유형을 인수 1의 유형으로 강제하지만 병합은 각 인수에 대해 각각의 유형을 사용합니다. 당신은 그냥 검색 및 바꾸기 유착과 ISNULL 경우에, 당신은 잠재적으로 ... 많은 오류를 얻을 수
— 스테판 스타 이거

75

COALESCE()대신 사용하십시오 :

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

ISNULL더 많은 기능을 제공하지만 기능은 매우 비슷 합니다. Coalesce는 목록에서 첫 번째 null이 아닌 값을 반환합니다. 그러므로:

SELECT COALESCE(null, null, 5); 

5를 반환하는 동안

SELECT COALESCE(null, 2, 5);

2를 반환

Coalesce는 많은 수의 논쟁을 취할 것입니다. 문서화 된 최대 값은 없습니다. 나는 그것을 100 개의 주장으로 시험했고 성공했다. 이것은 대부분의 상황에서 충분해야합니다.


24

ISNULL () 기능을 어떻게 에뮬레이트합니까?

SELECT (Field IS NULL) FROM ...

4
이것은
— isull

물론 질문에 대한 최고의 답변입니다. 이 표현식은 ISNULL ()과 완전히 같습니다. COALESCE ()는 매우 똑똑하고 흥미롭지 만 ISNULL ()을 닫을 때는 수행 할 수 없습니다.
— Skrol29

16
ISNULL주석 작성자가 무엇 을 참조 하는지 모르지만 field IS NULL부울 값을 제공 하지만 ISNULLSQL Server에서는 COALESCE다음 과 같이 작동 NULL합니다. 값 이 아닌 값 중 하나를 반환 합니다. 이 답변은 정말 잘못되었습니다. 설명서를 참조하십시오 ISNULL.
— jpmc26

10
이 주석자는 "MS SQL Server에서 ..."로 시작하는 질문을 깨닫지 못한 MySQL 사용자라고 생각합니다. MySQL에는 단일 인수를 사용하고 0 또는 1을 반환하는 ISNULL () 함수가 있습니다. T-SQL의 버전은 COALESCE 또는 Oracle의 NVL과 같은 두 가지 인수로 작동합니다.
— David Noha

1
greatvovan, 이것이 원래 포스터의 의도인지 여부에 관계없이, 사람들이 원하는 것은 "ISNULL 기능이 정확히 어떻게 작동 하는가"가 아니라 "필드가 null인지 어떻게 확인합니까"에 대한 대답이라고 생각합니다. 그것은 저의 경우 였으며이 대답은 그에 완벽합니다.
— Freeman Helmuth

15

시험:

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

3
이것은 텍스트 필드가 null이 아니라 '빈'경우를 다루기 때문에 좋습니다.
— soulia

-9

다음 함수를 만듭니다

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'

그리고 작동합니다.

다른 매개 변수 유형으로 다른 버전을 작성할 수 있습니다.


28
제발 아무도 이러지마 대신 DBA가 당신을 미워하지 않도록 coalesce ()를 사용하십시오.
— Jordan

1
postgres는 누구도 싫어하지 않도록 isull을 추가하십시오.
— Eric Twilegar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.