- Categorias:
IFNULL¶
Se expr1 for NULL, retorna expr2, caso contrário, retorna expr1.
- Aliases:
Sintaxe¶
IFNULL( <expr1> , <expr2> )
Argumentos¶
expr1Uma expressão geral.
expr2Uma expressão geral.
Notas de uso¶
O Snowflake realiza a conversão implícita dos argumentos para torná-los compatíveis. Por exemplo, se uma das expressões de entrada for um tipo numérico, o tipo de retorno também será numérico. Ou seja,
SELECT IFNULL('17', 1);primeiro converte o valor VARCHAR'17'no valor NUMBER17e, em seguida, retorna o primeiro valor não NULL.Quando a conversão não é possível, há uma falha na conversão implícita. Por exemplo,
SELECT IFNULL('foo', 1);retorna um erro porque o valor VARCHAR'foo'não pode ser convertido em um valor NUMBER.We recommend passing in arguments of the same type or explicitly converting arguments if needed.
Quando a conversão implícita converte um valor não numérico em numérico, o resultado é um valor do tipo NUMBER (18,5).
Para argumentos de cadeia de caracteres numérica que não sejam constantes, se NUMBER(18,5) não for suficiente para representar o valor numérico, então converta o argumento para um tipo que possa representar o valor.
Qualquer uma das expressões pode incluir uma instrução
SELECTcontendo operadores definidos, tais comoUNION,INTERSECT,EXCEPTeMINUS. Ao utilizar os operadores do conjunto, certifique-se de que os tipos de dados sejam compatíveis. Para obter mais detalhes, consulte Notas de uso geral no tópico Operadores de conjuntos.
Detalhes do agrupamento¶
The collation specifications of all input arguments must be compatible.
The collation of the result of the function is the highest-precedence collation of the inputs.
Retornos¶
Retorna o tipo de dados da expressão retornada.
Se ambas as expressões forem NULL, retorna NULL.
Exemplos¶
Crie uma tabela que contenha informações de contato dos fornecedores:
CREATE TABLE IF NOT EXISTS suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15));
A tabela contém o número de telefone de cada fornecedor em duas regiões diferentes. O número de telefone pode ser NULL para uma região.
Insira valores na tabela:
INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2)
VALUES(1, 'Company_ABC', NULL, '555-01111'),
(2, 'Company_DEF', '555-01222', NULL),
(3, 'Company_HIJ', '555-01333', '555-01444'),
(4, 'Company_KLM', NULL, NULL);
A instrução SELECT a seguir usa a função IFNULL para recuperar os valores phone_region_1 e phone_region_2.
Este exemplo mostra os seguintes resultados para a função IFNULL:
A coluna
IF_REGION_1_NULLcontém o valor emphone_region_1ou, se esse valor for NULL, o valor emphone_region_2.A coluna
IF_REGION_2_NULLcontém o valor emphone_region_2ou, se esse valor for NULL, o valor emphone_region_1.Se
phone_region_1ephone_region_2forem NULL, a função retornará NULL.
SELECT supplier_id,
supplier_name,
phone_region_1,
phone_region_2,
IFNULL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
IFNULL(phone_region_2, phone_region_1) IF_REGION_2_NULL
FROM suppliers
ORDER BY supplier_id;
+-------------+---------------+----------------+----------------+------------------+------------------+
| SUPPLIER_ID | SUPPLIER_NAME | PHONE_REGION_1 | PHONE_REGION_2 | IF_REGION_1_NULL | IF_REGION_2_NULL |
|-------------+---------------+----------------+----------------+------------------+------------------|
| 1 | Company_ABC | NULL | 555-01111 | 555-01111 | 555-01111 |
| 2 | Company_DEF | 555-01222 | NULL | 555-01222 | 555-01222 |
| 3 | Company_HIJ | 555-01333 | 555-01444 | 555-01333 | 555-01444 |
| 4 | Company_KLM | NULL | NULL | NULL | NULL |
+-------------+---------------+----------------+----------------+------------------+------------------+