- Catégories :
NVL¶
Si expr1 vaut NULL, renvoie expr2, sinon renvoie expr1.
- Alias:
Syntaxe¶
NVL( <expr1> , <expr2> )
Arguments¶
expr1Une expression générale.
expr2Une expression générale.
Notes sur l’utilisation¶
Snowflake performs implicit conversion of arguments to make them compatible. For example, if one of the input expressions is a numeric type, the return type is also a numeric type. That is,
SELECT NVL('17', 1);first converts the VARCHAR value'17'to the NUMBER value17, and then returns the first non-NULL value.When conversion isn’t possible, implicit conversion fails. For example,
SELECT NVL('foo', 1);returns an error because the VARCHAR value'foo'can’t be converted to a NUMBER value.We recommend passing in arguments of the same type or explicitly converting arguments if needed.
When implicit conversion converts a non-numeric value to a numeric value, the result is a value of type NUMBER(18,5).
Pour les arguments numériques de type chaîne qui ne sont pas des constantes, si NUMBER(18,5) n’est pas suffisant pour représenter la valeur numérique, vous devez convertir l’argument en un type qui peut représenter la valeur.
L’une ou l’autre expression peut inclure une instruction
SELECTcontenant des opérateurs Set, tels queUNION,INTERSECT,EXCEPTetMINUS. Lorsque vous utilisez des opérateurs Set, assurez-vous que les types de données sont compatibles. Pour plus d’informations, voir Notes générales sur l’utilisation dans la rubrique Définir les opérateurs.
Détails du classement¶
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.
Renvoie¶
Renvoie le type de données de l’expression renvoyée.
Si les deux expressions sont NULL, renvoie NULL.
Exemples¶
Créer une table contenant les coordonnées des fournisseurs :
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));
La table contient le numéro de téléphone de chaque fournisseur dans deux régions différentes. Le numéro de téléphone peut être NULL pour une région.
Insérer des valeurs dans la table :
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);
L’instruction SELECT suivante utilise la fonction NVL pour récupérer les valeurs phone_region_1 et phone_region_2.
Cet exemple montre les résultats suivants pour la fonction NVL :
La colonne
IF_REGION_1_NULLcontient la valeur dephone_region_1ou, si cette valeur est NULL, la valeur dephone_region_2.La colonne
IF_REGION_2_NULLcontient la valeur dephone_region_2ou, si cette valeur est NULL, la valeur dephone_region_1.Si
phone_region_1etphone_region_2sont tous deux NULL, la fonction renvoie NULL.
SELECT supplier_id,
supplier_name,
phone_region_1,
phone_region_2,
NVL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
NVL(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 |
+-------------+---------------+----------------+----------------+------------------+------------------+