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.