

 Amazon Redshift ne prendra plus en charge la création de nouveaux Python à UDFs partir du patch 198. UDFs Le Python existant continuera de fonctionner jusqu'au 30 juin 2026. Pour plus d’informations, consultez le [ billet de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Fonctions NVL et COALESCE
<a name="r_NVL_function"></a>

Renvoie la valeur de la première expression qui n’est pas nulle dans une série d’expressions. Lorsqu’une valeur non nulle est trouvée, les expressions restantes de la liste ne sont pas évaluées. 

NVL est identique à COALESCE. Ce sont des synonymes. Cette rubrique explique la syntaxe et contient des exemples pour les deux.

## Syntaxe
<a name="r_NVL_function-synopsis"></a>

```
NVL( expression, expression, ... )
```

La syntaxe de COALESCE est identique :

```
COALESCE( expression, expression, ... )
```

Si toutes les expressions régulières sont null, le résultat est null.

Ces fonctions sont utiles lorsque vous souhaitez renvoyer une valeur secondaire lorsqu’une valeur primaire est manquante ou nulle. Par exemple, une requête peut renvoyer le premier des trois numéros de téléphone disponibles : portable, domicile ou travail. L’ordre des expressions dans la fonction détermine l’ordre d’évaluation.

## Arguments
<a name="r_NVL_function-arguments"></a>

 *expression*   
Expression, telle qu’un nom de colonne, à évaluer pour l’état null.

## Type de retour
<a name="r_NVL_function-returntype"></a>

Amazon Redshift détermine le type de données de la valeur renvoyée en fonction des expressions d’entrée. Si les types de données des expressions d’entrée n’ont pas de type commun, une erreur est renvoyée.

## Exemples
<a name="r_NVL_function-examples"></a>

Si la liste contient des expressions entières, la fonction renvoie un entier. 

```
SELECT COALESCE(NULL, 12, NULL);

coalesce
--------------
12
```

Cet exemple, qui est identique à l’exemple précédent, sauf qu’il utilise NVL, renvoie le même résultat. 

```
SELECT NVL(NULL, 12, NULL);

coalesce
--------------
12
```

L’exemple suivant renvoie une chaîne de caractères.

```
SELECT COALESCE(NULL, 'Amazon Redshift', NULL);

coalesce
--------------
Amazon Redshift
```

L’exemple suivant génère une erreur car les types de données varient dans la liste d’expressions. Dans ce cas, la liste contient à la fois un type de chaîne et un type de nombre.

```
SELECT COALESCE(NULL, 'Amazon Redshift', 12);
ERROR: invalid input syntax for integer: "Amazon Redshift"
```

Dans cet exemple, vous créez une table avec les colonnes START\$1DATE et END\$1DATE, vous insérez des lignes comprenant des valeurs nulles, puis vous appliquez une expression NVL aux deux colonnes.

```
create table datetable (start_date date, end_date date);           
insert into datetable values ('2008-06-01','2008-12-31');
insert into datetable values (null,'2008-12-31');
insert into datetable values ('2008-12-31',null);
```

```
select nvl(start_date, end_date)
from datetable
order by 1;
               
coalesce
------------
2008-06-01
2008-12-31
2008-12-31
```

Le nom de colonne par défaut pour une expression NVL est COALESCE. La requête suivante renvoie les mêmes résultats :

```
select coalesce(start_date, end_date)
from datetable
order by 1;
```

Dans les exemples de requêtes suivants, vous créez une table contenant des exemples d’informations sur les réservations d’hôtel et insérez plusieurs lignes. Certains enregistrements contiennent des valeurs nulles.

```
create table booking_info (booking_id int, booking_code character(8), check_in date, check_out date, funds_collected numeric(12,2));
```

Insérez l’exemple de données suivant. Certains enregistrements n’ont pas de date `check_out` ou de montant `funds_collected`.

```
insert into booking_info values (1, 'OCEAN_WV', '2023-02-01','2023-02-03',100.00);
insert into booking_info values (2, 'OCEAN_WV', '2023-04-22','2023-04-26',120.00);
insert into booking_info values (3, 'DSRT_SUN', '2023-03-13','2023-03-16',125.00);
insert into booking_info values (4, 'DSRT_SUN', '2023-06-01','2023-06-03',140.00);
insert into booking_info values (5, 'DSRT_SUN', '2023-07-10',null,null);
insert into booking_info values (6, 'OCEAN_WV', '2023-08-15',null,null);
```

La requête suivante renvoie une liste de dates. Si la date `check_out` n’est pas disponible, la date `check_in` est indiquée.

```
select coalesce(check_out, check_in)
from booking_info
order by booking_id;
```

Voici les résultats. Notez que les deux derniers enregistrements indiquent la date `check_in`.

```
coalesce
------------
2023-02-03
2023-04-26	
2023-03-16	
2023-06-03	
2023-07-10	
2023-08-15
```

Si vous prévoyez qu’une requête renvoie des valeurs null pour certaines fonctions ou colonnes, vous pouvez utiliser une expression NVL pour remplacer les valeurs NULL par une autre valeur. Par exemple, les fonctions d’agrégation, telles que SUM, renvoient des valeurs null au lieu de zéros lorsqu’elles n’ont aucune ligne à évaluer. Vous pouvez utiliser une expression NVL pour remplacer ces valeurs null par `700.0`. Au lieu de `485`, la somme de `funds_collected` a pour résultat `1885`, car les deux lignes contenant la valeur null sont remplacées par `700`.

```
select sum(nvl(funds_collected, 700.0)) as sumresult from booking_info;
               
sumresult
------
 1885
```