112 votes

Fonction COALESCE dans TSQL

Quelqu'un peut-il expliquer comment fonctionne la fonction COALESCE dans TSQL ? La syntaxe est la suivante

COALESCE(x, y)

Le document MSDN sur cette fonction est assez vague

216voto

MatBailie Points 37610

Je ne sais pas pourquoi vous pensez que la documentation est vague.

Il passe simplement en revue tous les paramètres un par un, et renvoie le premier qui est NOT NULL .

COALESCE(NULL, NULL, NULL, 1, 2, 3)
=> 1

COALESCE(1, 2, 3, 4, 5, NULL)
=> 1

COALESCE(NULL, NULL, NULL, 3, 2, NULL)
=> 3

COALESCE(6, 5, 4, 3, 2, NULL)
=> 6

COALESCE(NULL, NULL, NULL, NULL, NULL, NULL)
=> NULL

Il accepte à peu près n'importe quel nombre de paramètres, mais ils doivent être du même type de données. (S'il ne s'agit pas du même type de données, ils sont implicitement convertis en un type de données approprié à l'aide de la fonction ordre de préséance des types de données .)

C'est comme si ISNULL() mais pour plusieurs paramètres, au lieu de deux seulement.

C'est aussi ANSI-SQLISNULL() ne l'est pas.

75voto

Bill Melius Points 318

On m'a dit que COALESCE est moins coûteux que ISNULL, mais les recherches ne l'indiquent pas. ISNULL ne prend que deux paramètres, le champ qui est évalué pour NULL, et le résultat que vous voulez s'il est évalué comme NULL. COALESCE prend un nombre quelconque de paramètres et renvoie la première valeur rencontrée qui n'est pas NULL.

Il y a une description beaucoup plus complète des détails ici http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/

19voto

John Waclawski Points 93

Voici la façon dont je vois COALESCE... et j'espère que cela a un sens...

Dans une forme simpliste .

Coalesce(FieldName, 'Empty')

Cela se traduit donc par Si "FieldName" est NULL, remplissez la valeur du champ avec le mot "EMPTY".

Maintenant pour les valeurs multiples...

Coalesce(Nom du champ1, Nom du champ2, Valeur2, Valeur3)

Si la valeur de Fieldname1 est nulle, on la remplit avec la valeur de Fieldname2, si FieldName2 est NULL, on la remplit avec Value2, etc.

Ce morceau de code de test pour le AdventureWorks2012 L'exemple de base de données fonctionne parfaitement et donne une bonne explication visuelle de la façon dont les services de l'UE sont utilisés. COALESCE travaux :

SELECT Name, Class, Color, ProductNumber,
COALESCE(Class, Color, ProductNumber) AS FirstNotNull
FROM Production.Product

4voto

CindyPsych Points 19

La coalescence est bien plus qu'un simple remplacement de ISNULL. Je suis tout à fait d'accord pour dire que la "documentation" officielle de coalesce est vague et peu utile. Cet article est d'une grande aide. http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/

3voto

S'chn T'gai Spock Points 279

Voici une requête simple contenant coalesce -

select * from person where coalesce(addressId, ContactId) is null.

Il renverra les personnes pour lesquelles addressId et contactId sont tous deux nuls.

fonction de fusion

  • prend au moins deux arguments.
  • Les arguments doivent être de type entier.
  • retourne le premier argument non nul.

par exemple

  • coalesce(null, 1, 2, 3) retournera 1.
  • coalesce(null, null) sera retournera null.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X