Une requête SQL qui remplace les valeurs NULL.
Question
J'ai besoin d'une requête SQL qui renvoie ContactDate, SortName, City, ContactType et Summary à partir des tableaux ci-dessous. Si une valeur est nulle, il me faut le texte & # 8220; Aucune entrée & # 8221;.
Table des contacts
- ContactID
- ContactDate
- ID utilisateur
- Résumé
- Type de contact
- SortName
Table utilisateur
- ID utilisateur
- Prénom
- Nom
- AddressID
AddressTable
- AddressID
- Ville
- rue
- État
- Zip
La solution
SELECT COALESCE(CAST(CONVERT(VARCHAR(10), ContactTable.ContactDate, 101) AS VARCHAR(10)), 'No Entry') AS ContactDate,
COALESCE(ContactTable.SortName, 'No Entry') AS SortName,
COALESCE(AddressTable.City, 'No Entry') AS City,
COALESCE(ContactTable.ContactType, 'No Entry') AS ContactType
FROM ContactTable
LEFT OUTER JOIN UserTable ON ContactTable.UserID = UserTable.UserID
LEFT OUTER JOIN AddressTable ON UserTable.AddressID = AddressTable.AddressID
Voici un tableau des formats SQL DateTime pour l'instruction CONVERT ci-dessus.
Autres conseils
COALESCE () sur toute plate-forme digne de ce nom.
Assurez-vous de gérer les problèmes de casting.
Tels que:
--(SQL Server)
SELECT
C.ContactID,
COALESCE(CAST(CONVERT(varchar(10), C.ContactDate, 101) AS varchar(10), 'No Entry') AS ContactDate,
COALESCE(SorName, 'No Entry') AS SortName
etc., etc.
SELECT
ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table
Utiliser ISNULL est assez simple.
La version Oracle de cette fonction s'appelle nvl
. Même utilisation - SELECT nvl (nom_colonne, valeur-souhaitée) FROM foo
.
La version plus générale de ceci est decode
, qui a trois paramètres et vous permet de spécifier la valeur de colonne pour laquelle vous voulez remplacer (afin que vous puissiez remplacer tous les "Johnny" par "John 'ou quelque chose).
L'utilisation de IIF est une solution de base de données Access mais peut fonctionner dans d'autres bases de données.
SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName
La fonction IIF renvoie l'une des 2 valeurs dépendant de l'évaluation d'une expression.
Syntaxe SQL:
IIF (expression, valeur vraie1, valeur fausse)
Vous pouvez également faire différents appels pour chaque colonne. Il faudra plus d’appels individuels, mais cela peut être plus rapide si vous n’avez pas beaucoup de lignes à mettre à jour.
update ContactTable set ContactDate = 'No Entry' where ContactDate is null;
Répéter pour chaque colonne.