2010-07-20 2 views
0

J'ai une colonne dans mon instruction select qui ressemble à ceci:SQL Server: Utilisation d'une instruction de cas pour voir si une date est NULL et si elle est de retour « »

SELECT CASE WHEN fu.SentOutDate IS NULL THEN '' ELSE fu.SentOutDate END 

Ce retour 1900-01-01 00:00:00.000 pour les qui serait autrement NULL

Je le sais parce que quand je mets en seulement fu.SentOutDate il arrive que NULL

Pourquoi cela arrive et comment puis-je juste pour retourner une valeur vide?

Répondre

2

Il est votre casting « » à un DATETIME, depuis votre autre colonne que vous souhaitez revenir est une colonne datetime.

SELECT CASE WHEN 1=1 THEN '' ELSE GETDATE() END 

vous donnera la même valeur ...

Vous pouvez convertir en un varchar (32), mais je ne suis pas certain des ramifications

SELECT CASE WHEN 1=1 THEN '' ELSE CAST(GETDATE() AS varchar(32)) END 
1

Une colonne ne peut renvoyer qu'un type de données - DATETIME! = Chaîne/VARCHAR.

Si vous voulez une chaîne de longueur zéro dans le cas où la valeur est NULL, vous devez modifier explicitement le type de données, en utilisant CAST/CONVERT pour changer la valeur non NULL en un type de données VARCHAR/etc.

3

Essayez de convertir la date à une chaîne de sorte qu'il ne cherche pas à convertir « » en date:

(CASE WHEN fu.SentOutDate IS NULL THEN '' ELSE CONVERT(varchar,fu.SentOutDate) END) 
1

Si vous Si vous ne faites que vérifier les valeurs NULL, vous pouvez essayer ISNULL() et lancer la date en tant que varchar.

SELECT ISNULL (CAST (fu.SentOutDate AS VARCHAR (50)), '') AS SendOutDate DE tablename

0

Il semble que vous affichez cette valeur dans une interface graphique ou client quelque part. À mon avis, la meilleure pratique consiste à le convertir à partir de la valeur nulle là, pas dans la requête.

Si jamais vous créez une base de données qui s'adapte à des millions d'utilisateurs, vous voulez un peu de traitement possible dans la base de données et autant que possible dans le client. Faire la conversion d'une date en caractère est une charge inutile sur le système (le calcul des caractères est toujours beaucoup plus lent que les maths).

0

Cela peut fonctionner:

case when ISNULL(convert(varchar, a.rec_dt, 108), '00:00:00')='00:00:00' then '' 
    else CAST(rec_dt as varchar) 
Questions connexes