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

1voto

Eddie Kumar Points 364

La définition la plus simple de l Fonction Coalesce() pourrait être :

La fonction Coalesce() évalue tous les arguments passés et renvoie la valeur de la première instance de l'argument qui n'a pas été évaluée comme un NULL.

Remarque : elle évalue TOUS les paramètres, c'est-à-dire qu'elle ne saute pas l'évaluation du ou des arguments situés à droite du paramètre retourné/NOT NULL.

Syntaxe :

Coalesce(arg1, arg2, argN...)

Méfiez-vous de : En dehors des arguments qui évaluent à NULL, tous les autres arguments (NOT-NULL) doivent soit être du même type de données, soit être de type types de correspondance (qui peuvent être "implicitement auto-convertis" en un type de données compatible), voir les exemples ci-dessous :

PRINT COALESCE(NULL, ('str-'+'1'), 'x')  --returns 'str-1, works as all args (excluding NULLs) are of same VARCHAR type.
--PRINT COALESCE(NULL, 'text', '3', 3)    --ERROR: passed args are NOT matching type / can't be implicitly converted.
PRINT COALESCE(NULL, 3, 7.0/2, 1.99)      --returns 3.0, works fine as implicit conversion into FLOAT type takes place.
PRINT COALESCE(NULL, '1995-01-31', 'str') --returns '2018-11-16', works fine as implicit conversion into VARCHAR occurs.

DECLARE @dt DATE = getdate()
PRINT COALESCE(NULL, @dt, '1995-01-31')  --returns today's date, works fine as implicit conversion into DATE type occurs.

--DATE comes before VARCHAR (works):
PRINT COALESCE(NULL, @dt, 'str')      --returns '2018-11-16', works fine as implicit conversion of Date into VARCHAR occurs.

--VARCHAR comes before DATE (does NOT work):
PRINT COALESCE(NULL, 'str', @dt)      --ERROR: passed args are NOT matching type, can't auto-cast 'str' into Date type.

HTH

0voto

Xiao Points 11
declare @store table (store_id varchar(300))
insert into @store 
values ('aa'),('bb'),('cc')
declare @str varchar (4000)
select @str = concat(@str+',',store_id) from @store
select @str

0voto

Golden Lion Points 985

Coalesce prend un nombre n d'arguments de gauche à droite. coalesce sélectionne le premier argument non nul. de même isnull(champ, 'inconnu') est équivalent à coalesce(champ, 'inconnu') avec la différence que coalesce peut comparer plusieurs champs.

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