View a markdown version of this page

Função NVL2 - Amazon Redshift

O Amazon Redshift deixará de oferecer suporte ao uso de UDFs em Python após 30 de junho de 2026. Começaremos a aplicar essa alteração em fases. Consulte mais informações sobre os detalhes do fim da vida útil do Python e as opções de migração na publicação do blog publicada em 30 de junho de 2025.

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