Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

concaténation de chaine avec un NULL

5 réponses
Avatar
Renaud
Bonjour,

J'ai un problème tout bête.
J'ai une vue dont un extrait de la selection ressemble à ceci :

SELECT MaCol1 + MaCol2 + MaCol3 As MaCol123

MaCol1 2 et 3 sont des varchar. Mon problème est que si l'une de ces 3
colonnes contient NULL, la concaténation des trois me renvoie NULL. Ce n'est
pas ce que je veux, je veux concaténer toutes les colonnes, même NULL (avec
une '' à la place)
Visiblement, SQL Serveur ne veut pas me faire un CAST implicite de NULL en
'' (ni explicite d'ailleur, j'ai essayé avec CAST (MaCOl1 as varchar))

J'ai donc essayé un truc du style :
CASE MaCOl1 When NULL THEN '' ELSE MaCOl1 END + CASE MaCOl2 When NULL THEN
'' ELSE MaCOl2 END + etc...
Mais le WHEN NULL n'a pas l'air de vouloir fonctionner.

Sous Access, j'aurais écrit un truc du style :
SELECT IIf(IsNull(MaCol1),'',MaCol1) + IIf(IsNull(MaCol2),'',MaCol2)+
IIf(IsNull(MaCol3),'',MaCol3) As MaCol123

Mais sous SQL Serveur, en tant que novice, je sèche.

Une âme charitable et éclairée pourait-elle m'éclairer ?

D'avance merci.

Renaud

5 réponses

Avatar
zarko
Utilise plutot :

SELECT IsNull(MaCol1,'') + IsNull(MaCol2,'') + IsNull(MaCol3,'') As MaCol123

"Renaud" a écrit dans le message de
news:%
Bonjour,

J'ai un problème tout bête.
J'ai une vue dont un extrait de la selection ressemble à ceci :

SELECT MaCol1 + MaCol2 + MaCol3 As MaCol123

MaCol1 2 et 3 sont des varchar. Mon problème est que si l'une de ces 3
colonnes contient NULL, la concaténation des trois me renvoie NULL. Ce


n'est
pas ce que je veux, je veux concaténer toutes les colonnes, même NULL


(avec
une '' à la place)
Visiblement, SQL Serveur ne veut pas me faire un CAST implicite de NULL en
'' (ni explicite d'ailleur, j'ai essayé avec CAST (MaCOl1 as varchar))

J'ai donc essayé un truc du style :
CASE MaCOl1 When NULL THEN '' ELSE MaCOl1 END + CASE MaCOl2 When NULL THEN
'' ELSE MaCOl2 END + etc...
Mais le WHEN NULL n'a pas l'air de vouloir fonctionner.

Sous Access, j'aurais écrit un truc du style :
SELECT IIf(IsNull(MaCol1),'',MaCol1) + IIf(IsNull(MaCol2),'',MaCol2)+
IIf(IsNull(MaCol3),'',MaCol3) As MaCol123

Mais sous SQL Serveur, en tant que novice, je sèche.

Une âme charitable et éclairée pourait-elle m'éclairer ?

D'avance merci.

Renaud




Avatar
Patrice
Ou encore vérifie que tu as effectivement besoin d'avoir NULL dans ces
chaînes. Si non, ne pas autoriser NULL et définir une chaîne vide comme
valeur par défaut pour ces champs...

--

"zarko" a écrit dans le message de
news:40f29f39$0$30287$
Utilise plutot :

SELECT IsNull(MaCol1,'') + IsNull(MaCol2,'') + IsNull(MaCol3,'') As


MaCol123

"Renaud" a écrit dans le message de
news:%
> Bonjour,
>
> J'ai un problème tout bête.
> J'ai une vue dont un extrait de la selection ressemble à ceci :
>
> SELECT MaCol1 + MaCol2 + MaCol3 As MaCol123
>
> MaCol1 2 et 3 sont des varchar. Mon problème est que si l'une de ces 3
> colonnes contient NULL, la concaténation des trois me renvoie NULL. Ce
n'est
> pas ce que je veux, je veux concaténer toutes les colonnes, même NULL
(avec
> une '' à la place)
> Visiblement, SQL Serveur ne veut pas me faire un CAST implicite de NULL


en
> '' (ni explicite d'ailleur, j'ai essayé avec CAST (MaCOl1 as varchar))
>
> J'ai donc essayé un truc du style :
> CASE MaCOl1 When NULL THEN '' ELSE MaCOl1 END + CASE MaCOl2 When NULL


THEN
> '' ELSE MaCOl2 END + etc...
> Mais le WHEN NULL n'a pas l'air de vouloir fonctionner.
>
> Sous Access, j'aurais écrit un truc du style :
> SELECT IIf(IsNull(MaCol1),'',MaCol1) + IIf(IsNull(MaCol2),'',MaCol2)+
> IIf(IsNull(MaCol3),'',MaCol3) As MaCol123
>
> Mais sous SQL Serveur, en tant que novice, je sèche.
>
> Une âme charitable et éclairée pourait-elle m'éclairer ?
>
> D'avance merci.
>
> Renaud
>
>




Avatar
Renaud
C'est parfait, merci beacoup. Exactement ce qu'il me fallait.

"zarko" a écrit dans le message de
news:40f29f39$0$30287$
Utilise plutot :

SELECT IsNull(MaCol1,'') + IsNull(MaCol2,'') + IsNull(MaCol3,'') As


MaCol123

"Renaud" a écrit dans le message de
news:%
> Bonjour,
>
> J'ai un problème tout bête.
> J'ai une vue dont un extrait de la selection ressemble à ceci :
>
> SELECT MaCol1 + MaCol2 + MaCol3 As MaCol123
>
> MaCol1 2 et 3 sont des varchar. Mon problème est que si l'une de ces 3
> colonnes contient NULL, la concaténation des trois me renvoie NULL. Ce
n'est
> pas ce que je veux, je veux concaténer toutes les colonnes, même NULL
(avec
> une '' à la place)
> Visiblement, SQL Serveur ne veut pas me faire un CAST implicite de NULL


en
> '' (ni explicite d'ailleur, j'ai essayé avec CAST (MaCOl1 as varchar))
>
> J'ai donc essayé un truc du style :
> CASE MaCOl1 When NULL THEN '' ELSE MaCOl1 END + CASE MaCOl2 When NULL


THEN
> '' ELSE MaCOl2 END + etc...
> Mais le WHEN NULL n'a pas l'air de vouloir fonctionner.
>
> Sous Access, j'aurais écrit un truc du style :
> SELECT IIf(IsNull(MaCol1),'',MaCol1) + IIf(IsNull(MaCol2),'',MaCol2)+
> IIf(IsNull(MaCol3),'',MaCol3) As MaCol123
>
> Mais sous SQL Serveur, en tant que novice, je sèche.
>
> Une âme charitable et éclairée pourait-elle m'éclairer ?
>
> D'avance merci.
>
> Renaud
>
>




Avatar
Steve Kass
Renaud,

CASE MaCol1 When NULL ... fait la comparaison (MaCol1 = NULL), ce qui
est fausse. Il faut evaluer l'expression X IS NULL, non X = NULL pour
déterminer si X est nulle. Essayez CASE WHEN MaCol1 IS NULL THEN ''
ELSE MaCol1 END ...

Steve Kass
Drew University



Renaud wrote:

Bonjour,

J'ai un problème tout bête.
J'ai une vue dont un extrait de la selection ressemble à ceci :

SELECT MaCol1 + MaCol2 + MaCol3 As MaCol123

MaCol1 2 et 3 sont des varchar. Mon problème est que si l'une de ces 3
colonnes contient NULL, la concaténation des trois me renvoie NULL. Ce n'est
pas ce que je veux, je veux concaténer toutes les colonnes, même NULL (avec
une '' à la place)
Visiblement, SQL Serveur ne veut pas me faire un CAST implicite de NULL en
'' (ni explicite d'ailleur, j'ai essayé avec CAST (MaCOl1 as varchar))

J'ai donc essayé un truc du style :
CASE MaCOl1 When NULL THEN '' ELSE MaCOl1 END + CASE MaCOl2 When NULL THEN
'' ELSE MaCOl2 END + etc...
Mais le WHEN NULL n'a pas l'air de vouloir fonctionner.

Sous Access, j'aurais écrit un truc du style :
SELECT IIf(IsNull(MaCol1),'',MaCol1) + IIf(IsNull(MaCol2),'',MaCol2)+
IIf(IsNull(MaCol3),'',MaCol3) As MaCol123

Mais sous SQL Serveur, en tant que novice, je sèche.

Une âme charitable et éclairée pourait-elle m'éclairer ?

D'avance merci.

Renaud






Avatar
Christophe KERHOUSSE
Salut,

Il existe une option à activer pour la connection en cours (par défaut est
sur ON) :
SET CONCAT_NULL_YIELDS_NULL OFF

Ainsi la concaténation 'toto' + NULL renvoie 'toto'



"Renaud" a écrit dans le message de
news:%
Bonjour,

J'ai un problème tout bête.
J'ai une vue dont un extrait de la selection ressemble à ceci :

SELECT MaCol1 + MaCol2 + MaCol3 As MaCol123

MaCol1 2 et 3 sont des varchar. Mon problème est que si l'une de ces 3
colonnes contient NULL, la concaténation des trois me renvoie NULL. Ce


n'est
pas ce que je veux, je veux concaténer toutes les colonnes, même NULL


(avec
une '' à la place)
Visiblement, SQL Serveur ne veut pas me faire un CAST implicite de NULL en
'' (ni explicite d'ailleur, j'ai essayé avec CAST (MaCOl1 as varchar))

J'ai donc essayé un truc du style :
CASE MaCOl1 When NULL THEN '' ELSE MaCOl1 END + CASE MaCOl2 When NULL THEN
'' ELSE MaCOl2 END + etc...
Mais le WHEN NULL n'a pas l'air de vouloir fonctionner.

Sous Access, j'aurais écrit un truc du style :
SELECT IIf(IsNull(MaCol1),'',MaCol1) + IIf(IsNull(MaCol2),'',MaCol2)+
IIf(IsNull(MaCol3),'',MaCol3) As MaCol123

Mais sous SQL Serveur, en tant que novice, je sèche.

Une âme charitable et éclairée pourait-elle m'éclairer ?

D'avance merci.

Renaud