Tout d'abord, j'aimerais savoir comment CAST
fonctionne avec les champs NULL
et comment se comporte-t-il lorsque la valeur est NULL
?
Par exemple dans l'expression:
(CAST(INT_FIELD as nvarchar(100))
que se passe-t-il si la valeur INT_FIELD
est NULL
?
La raison en est que lorsque j'essaie de faire ce qui suit:
SELECT (CAST(INT_FIELD as nvarchar(100)) + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE;
Je reçois NULL
même si le SOME_OTHER_FIELD
n'est pas nul. Je devine qu'il a une sorte de logique que NULL + something = NULL
mais je ne suis pas sûr.
Comment puis-je contrôler ce comportement?
Vous devez utiliser ISNULL
ou COALESCE
, car la plupart des opérations de lignes entre NULL
aboutiront à NULL
. CAST
d'une NULL
renvoie NULL
et NULL
+ quelque chose est également NULL
. Dans votre exemple, vous devriez faire quelque chose comme ceci:
SELECT ISNULL(CAST(INT_FIELD as nvarchar(100),'') + ' ' + ISNULL(SOME_OTHER_FIELD,'') FROM SOME_TABLE;
Bien sûr, dans mon exemple, si les deux champs sont NULL
il returnnera '' au lieu de '', mais vous avez l'idée.
Regardez dans COALESCE, où vous pouvez find le premier non nul et returnner 0 si tous sont nuls, par exemple:
SELECT (CAST(COALESCE(INT_FIELD,0) as nvarchar(100)) + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE;
Normalement, NULL
+ (-, /, *, etc) something
= NULL
. Vous pouvez utiliser
SELECT ISNULL(CAST(INT_FIELD as nvarchar(100)),'') + ' ' + ISNULL(SOME_OTHER_FIELD FROM SOME_TABLE,'')
ou vous pouvez SET CONCAT_NULL_YIELDS_NULL OFF
( plus de détails )
Essayez d'utiliser COALESCE
SELECT COALESCE(CAST(INT_FIELD as nvarchar(100), '') + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE;