Valeur par défaut définie dans la requête lorsque la valeur est null
Je suis vraiment une requête simple, cependant, pour certains des résultats la valeur d'un champ est null. Comment puis-je mettre cette valeur à "une chaîne" si sa valeur est null?
Quelque chose comme
SELECT RegName,
RegEmail,
RegPhone,
RegOrg,
RegCountry,
DateReg,
(Website IS NULL? 'no website' : Website) AS WebSite
FROM RegTakePart
WHERE Reject IS NULL
Il sera exécuté sur un serveur sql server 2005
grâce
Regardez les
Merci à tous, je vais accepter la réponse dès qu'il va me permettre
ISNULL
ou COALESCE
fonctions.Merci à tous, je vais accepter la réponse dès qu'il va me permettre
OriginalL'auteur andrew slaughter | 2013-10-09
Vous devez vous connecter pour publier un commentaire.
Utiliser les éléments suivants:
ou, @Lieven noter:
La dynamique de FUSIONNER est que vous pouvez définir plus d'arguments, donc, si le premier est null, la deuxième, si la seconde est nulle d'obtenir la troisième, etc, etc...
Ne sont pas pertinentes à cet exemple, mais tout à fait notable, l'inconvénient de FUSIONNER, c'est qu'il se développe à une instruction du cas, de sorte
COALESCE((SELECT Col FROM T), 'No Value')
, s'élargit pourCASE WHEN (SELECT Col FROM T) IS NOT NULL THEN (SELECT Something FROM Table) ELSE 'No Value' END
sens de la sous-requête est exécutée deux fois si le résultat n'est pas nul. ISNULL ne présentent pas ce comportement. Une hausse de fusionner est que c'est dans l'ANSII Standard, ISNULL() ne l'est pas.OriginalL'auteur Giannis Paraskevopoulos
Utilisation
CASE
:ou
COALESCE
:OriginalL'auteur Rango
Comme indiqué ci-dessus, le confluent de la solution est préférable. Comme un avantage supplémentaire, vous pouvez utiliser les unir contre un "dérivé" de la valeur, comparativement à une valeur sélectionnée comme dans:
À l'aide de "iif" ou "cas" vous devez répéter la ligne alors qu'avec fusionnent vous n'avez pas et il permet d'éviter un "null" dans les cas de retour...
COALESCE
avec()
est très important, ou la requête ne compilera pas. Merci pour ceOriginalL'auteur T. Baum
Vous suffit d'utiliser
ISNULL(website, 'yourstring')
.Donc, votre requête sera comme:
COALESCE
etISNULL
sont les deux solutions.OriginalL'auteur Radu Gheorghiu
Pour éviter des problèmes à d'autres utilisateurs :
Problème 1 + Solution :
Si vous prévoyez d'utiliser le
ISNULL
fonctionner avec une Base de données Access, être conscient du fait que laISNULL
une fonction d'Accès est differrent de la mise en œuvre SQL Server.Accès
ISNULL
fonction renvoie toujoursTRUE
ouFALSE
.Donc, vous devez utiliser un
IIF
fonction autour de votreISNULL
utilisation.Problème 2 + Solution :
En outre, si vous souhaitez utiliser le même nom de champ comme Alias pour votre colonne, ce qui pourrait conduire l'Accès au Moteur de Base de données pour vous informer qu'il y est un "référence circulaire" pour le domaine.
Donc, si vous devez utiliser le même nom de champ comme Alias, vous avez juste à ajouter le nom de la table devant le nom du champ. (exemple : Vous avez à utiliser
RegTakePart.Website
au lieu de simplementWebsite
). De cette façon, vous pouvez utiliser librementWebsite
comme le nom de l'Alias de votre colonne.Le fonctionnement global (et testé) requête SQL pour éviter ces 2 problèmes est le suivant :
OriginalL'auteur AlexLaforge
Vérifier les FUSIONNER en fonction
http://msdn.microsoft.com/en-us/library/ms190349.aspx
OriginalL'auteur Lluis Martinez