Fév
10

Fonction SQL COALESCE

Author Appo    Category SQL     Tags , ,

Fonction SQL COALESCE

Aujourd’hui j’ai découvert une fonction SQL suite à un besoin particulier. Cette fonction c’est COALESCE, elle permet de retourner le premier élément non-NULL de la liste.

Exemple :

SELECT COALESCE(NULL,1);

Cette requete renverra 1 car c’est la première valeur de la liste non NULL.

Maintenant voici un cas concret d’utilisation :

Vous avez un table Adresse avec 5 champs (adresse_id, adresse_ville, adresse_cp, adresse_adresse1, adresse_adresse2)

Admettons que vous ayez le champs adresse_adresse2 qui soit null par défaut et que vous ayez les valeurs suivantes dans votre table (données provenant d’un formulaire, fourni seulement si elles sont remplies).

Dans notre cas, les 2 entrées n’ont pas d’adresse2, donc elles sont à NULL (Dans l’affichage des données d’une table dans postgresql, les champs à null sont affichés comme vide, donc source d’erreur quand on ne le sait pas ^^).

ID Ville CP Adresse1 Adresse2
1 Caen 14000 Rue de la paix
2 Nantes 44000 Avenue de la république

Vous voulez vérifier avant d’insérer dans cette table que votre couple ville, cp, adresse1, adresse2 n’existe pas déjà.

L’utilisateur à saisi Caen, 14000 et Rue de la paix (donc adresse2 est vide), la requête générée sera donc la suivante :

SELECT adresse_id FROM adresse WHERE adresse_ville = 'Caen' AND adresse_cp = '14000' AND adresse_adresse1 = 'Rue de la paix' AND adresse_adresse2 = '';

Normalement on s’attend à ce que la requête nous renvoi 1 car dans la table nous avons bien une adresse avec la ville, le CP, l’adresse1 correspondant et pas d’adresse2.

Sauf que (dans postgresql en tout cas), cette requête ne retourne rien. En effet, adresse2 est à NULL et donc  » != null

Embêtant car dans notre cas, cela reviens au même, que adresse2 soit NULL ou vide dans tous les cas cela signifie qu’il n’y a pas d’adresse2.

C’est donc ici qu’intervient notre fonction COALESCE

SELECT adresse_id FROM adresse WHERE adresse_ville = 'Caen' AND adresse_cp = '14000' AND COALESCE(adresse_adresse1,'') = 'Rue de la paix' AND COALESCE(adresse_adresse2,'') = '';

Maintenant notre fonction va retourner soit la valeur d’adresse2 si elle est pas NULL, soit vide. Dans notre cas, elle va retourner vide et donc la comparaison  » =  » sera bonne.

Voilà, pour plus d’infos vous pouvez jeter un oeil à la doc MySQL ou Postgresql



1 Comment to “Fonction SQL COALESCE”

  • Nico 11 février 2011 à 18 h 58 min

    Ta bannière est scandaleuse… Sale jeune.

Poster un commentaire

Edito

Bienvenue sur Mémorandom.

Mémorandom est le blog de 2 développeurs web, Appo et Nico.

Vous y trouverez des informations sur différents domaines touchant de près ou de loin au développement web

Tutoriels Yii Framework

Nos derniers articles

Blogs Dev

Liens

Étiquettes