NVL2 함수 - Amazon Redshift

NVL2 함수

지정하는 표현식의 평가 결과가 NULL 또는 NOT NULL인지 여부에 따라 두 값 중 하나를 반환합니다.

구문

NVL2 ( expression, not_null_return_value, null_return_value )

인수

expression

NULL 상태로 평가되는 표현식(열 이름 등)입니다.

not_null_return_value

expression이 NOT NULL로 평가되면 반환되는 값입니다. not_null_return_value 값은 expression과 동일한 데이터 형식이거나, 혹은 묵시적으로 이 데이터 형식으로 변환 가능해야 합니다.

null_return_value

expression이 NULL로 평가되면 반환되는 값입니다. null_return_value 값은 expression과 동일한 데이터 형식이거나, 혹은 묵시적으로 이 데이터 형식으로 변환 가능해야 합니다.

반환 타입

NVL2 반환 형식은 다음과 같이 결정됩니다.

  • not_null_return_value 또는 null_return_value이 NULL이면 not null 표현식의 데이터 형식이 반환됩니다.

not_null_return_valuenull_return_value 모두 NULL이 아닌 경우에는 다음과 같습니다.

  • not_null_return_valuenull_return_value의 데이터 형식이 동일하면 해당 데이터 형식이 반환됩니다.

  • not_null_return_valuenull_return_value의 숫자 데이터 형식이 다르면 가장 작으면서 호환도 가능한 숫자 데이터 형식이 반환됩니다.

  • not_null_return_valuenull_return_value의 날짜/시간 데이터 형식이 다르면 타임스탬프 데이터 형식이 반환됩니다.

  • not_null_return_valuenull_return_value의 문자 데이터 형식이 다르면 not_null_return_value의 데이터 형식이 반환됩니다.

  • not_null_return_valuenull_return_value의 데이터 형식이 숫자와 비숫자로 섞여 있으면 not_null_return_value의 데이터 형식이 반환됩니다.

중요

not_null_return_value의 데이터 형식이 반환되는 마지막 두 경우에서는 null_return_value가 묵시적으로 해당 데이터 형식으로 변환됩니다. 이때 데이터 형식이 서로 호환되지 않으면 함수가 중단됩니다.

사용 노트

expressionsearch 파라미터가 모두 null인 경우 NVL2와 유사한 방식으로 DECODE 함수을 사용할 수 있습니다. 차이점은, DECODE일 때는 result 파라미터의 값과 데이터 형식이 모두 반환되는 데 있습니다. 이와는 반대로 NVL2일 때는 not_null_return_value 또는 null_return_value 파라미터의 값 중에서 함수에서 선택하는 값과 함께 not_null_return_value의 데이터 형식이 반환됩니다.

예를 들어 column1이 NULL이라고 가정하면 다음 두 쿼리에서 동일한 값이 반환됩니다. 하지만 DECODE의 반환 값 데이터 형식은 INTEGER인 반면 NVL2의 반환 값 데이터 형식은 VARCHAR입니다.

select decode(column1, null, 1234, '2345'); select nvl2(column1, '2345', 1234);

다음은 일부 샘플 데이터를 수정한 후 두 필드를 평가하여 적합한 사용자 연락처를 제공하는 예입니다.

update users set email = null where firstname = 'Aphrodite' and lastname = 'Acevedo'; select (firstname + ' ' + lastname) as name, nvl2(email, email, phone) AS contact_info from users where state = 'WA' and lastname like 'A%' order by lastname, firstname; name contact_info --------------------+------------------------------------------- Aphrodite Acevedo (906) 632-4407 Caldwell Acevedo Nunc.sollicitudin@Duisac.ca Quinn Adams vel@adipiscingligulaAenean.com Kamal Aguilar quis@vulputaterisusa.com Samson Alexander hendrerit.neque@indolorFusce.ca Hall Alford ac.mattis@vitaediamProin.edu Lane Allen et.netus@risusDonec.org Xander Allison ac.facilisis.facilisis@Infaucibus.com Amaya Alvarado dui.nec.tempus@eudui.edu Vera Alvarez at.arcu.Vestibulum@pellentesque.edu Yetta Anthony enim.sit@risus.org Violet Arnold ad.litora@at.com August Ashley consectetuer.euismod@Phasellus.com Karyn Austin ipsum.primis.in@Maurisblanditenim.org Lucas Ayers at@elitpretiumet.com