Função NVL2 - Amazon Redshift

Função NVL2

Retorna um de dois valores, dependendo se uma expressão especificada avalia para NULL ou NOT NULL.

Sintaxe

NVL2 ( expression, not_null_return_value, null_return_value )

Argumentos

expressão

Uma expressão, tal como um nome de coluna, a ser avaliada quanto ao status nulo.

not_null_return_value

O valor retornado se a expressão avaliar para NOT NULL. O valor not_null_return_value deve ter o mesmo tipo de dados que a expressão ou ser implicitamente conversível para esse tipo de dados.

null_return_value

O valor retornado se a expressão avaliar para NULL. O valor null_return_value deve ter o mesmo tipo de dados que a expressão ou ser implicitamente conversível para esse tipo de dados.

Tipo de retorno

O tipo de retorno de NVL2 é determinado da seguinte forma:

  • Se not_null_return_value ou null_return_value for nulo, o tipo de dados da expressão não nula será retornado.

Se not_null_return_value e null_return_value não forem nulos:

  • Se not_null_return_value e null_return_value tiverem o mesmo tipo de dados, esse tipo de dados será retornado.

  • Se not_null_return_value e null_return_value tiverem diferentes tipos de dados numéricos, o menor tipo de dados numérico compatível será retornado.

  • Se not_null_return_value e null_return_value tiverem diferentes tipos de dados datetime, um tipo de dados de timestamp será retornado.

  • Se not_null_return_value e null_return_value tiverem diferentes tipos de dados de caracteres, o tipo de dados de not_null_return_value será retornado.

  • Se not_null_return_value e null_return_value tiverem tipos de dados numéricos e não numéricos variados, o tipo de dados de not_null_return_value será retornado.

Importante

Nos últimos dois casos onde o tipo de dados de not_null_return_value é retornado, o null_return_value é convertido implicitamente para esse tipo de dados. Se os tipos de dados forem incompatíveis, a função falhará.

Observações de uso

Função DECODE pode ser usada de forma similar a NVL2 quando os parâmetros da expressão e da pesquisa forem nulos. A diferença é que para DECODE, o retorno terá o valor e o tipo de dados do parâmetro do resultado. Em contraste, para NVL2, o retorno terá o valor do parâmetro not_null_return_value ou null_return_value, o que for selecionado pela função, mas terá o tipo de dados de not_null_return_value.

Por exemplo, supondo que column1 seja NULL, as consultas seguintes retornarão o mesmo valor. Contudo, o tipo de dados do valor de retorno para DECODE será INTEGER e o tipo de dados do valor de retorno para NVL2 será VARCHAR.

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

Exemplo

O seguinte exemplo altera alguns dados de amostra e, então, avalia dois campos para fornecer as informações de contato apropriadas para usuários:

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