web-dev-qa-db-fra.com

SQL Server Isnull retournant 1900-01-01 lorsque le champ est nul

Le morceau de code suivant renvoie 1900-01-01 lorsque le champ DOB est nul. Je voulais (et j'attendais) qu'il retourne une chaîne vide ('') mais ce n'est pas le cas. Comment dois-je procéder pour obtenir les résultats souhaités?

isnull(convert(date,DOB,1),'')
15
Juan Velez

Vous ne pouvez pas obtenir une chaîne vide car vous renvoyez le type de valeur DATE à partir de ISNULL.

Par MSDN , ISNULL

Renvoie le même type que check_expression. Si un littéral NULL est fourni comme check_expression, retourne le type de données de la valeur de remplacement. Si un NULL littéral est fourni en tant qu'expression de contrôle et qu'aucune valeur de remplacement n'est fournie, retourne un int.

Si vous vérifiez si la valeur est NULL, il n'est pas nécessaire de la convertir en date, à moins que vous ne vouliez renvoyer une valeur de date (ce que vous ne semblez pas).

Utilisez plutôt:

SELECT ISNULL( DOB , '')

Qui reviendra

''

si la valeur est NULL.

Une date NULL est NULL (aucune valeur). Une chaîne vide, en revanche, est évaluée à 0, qui dans SQL Server est implicitement un entier représentant le nombre de jours écoulés depuis 1900-01-01.

21
LowlyDBA