2017-08-22 1 views
1

J'ai actuellement le code suivant:Date de SQL Retour Si Null Alors Blank

CASE WHEN CONVERT(DATE, BirthDateTime) IS NULL THEN '' END AS DOB, 
CASE WHEN CONVERT(DATE, ServiceDateTime) IS NULL THEN '' END AS [Admission Date], 
CASE WHEN CONVERT(DATE, DischargeDateTime) IS NULL THEN '' END AS [Discharge Date], 

Il retourne:

enter image description here

Quelle est la meilleure façon de convertir encore la date à ce jour (original champ est datetime) et si elle est Null alors retourner vide ou ''

Merci d'avance!

+1

Quel SGBD utilisez-vous? Lorsque vous étiez en train d'écrire votre question et que vous avez ajouté la balise SQL, une grande boîte vous a été proposée vous suggérant d'ajouter une balise pour le SGBD spécifique, car la syntaxe et la fonctionnalité diffèrent entre elles. Pourquoi avez-vous décidé d'ignorer cette suggestion? –

+0

ISNULL (COLUMNNAME, '') dans le serveur SQL, et vérifiez coalesce ainsi pour l'apprentissage. – Amit

+0

Quel SGBD utilisez-vous? --- Je ne comprends pas. SQL Server 2012? – cmpmd2

Répondre

1

Dans SQL Server:

Puisque vous souhaitez utiliser une chaîne vide au lieu de null, alors vous allez être convertir en une chaîne. Vous pouvez utiliser la taille de 10 avec le style 120 pour revenir format iso (sans la partie du temps) comme ceci:

select 
    dob = isnull(convert(varchar(10),BirthDateTime,120),'') 
    , [Admission Date] = isnull(convert(varchar(10),ServiceDateTime,120),'') 
    , [Discharge Date] = isnull(convert(varchar(10),DischargeDateTime,120),'') 
from ... 

Vous pouvez trouver les autres codes de style pour convert() ici: docs: cast and convert

+0

Je ne changerais qu'une chose - utilisez 'char (10)' au lieu de 'varchar (10)', car c'est une longueur fixe. –

+0

@ZoharPeled Habituellement je le ferais, mais puisque 'null' est converti en une chaîne vide, et la conversion changerait la chaîne vide en 10 espaces vides ... Je n'aime juste pas un tas de caractères espace dans mon jeu de résultats au lieu d'une chaîne vide. – SqlZim

+0

Bon point, je n'y ai pas pensé. –

0

Vous pouvez utiliser se fondre. Une colonne doit toujours avoir un type indépendamment de la ligne, de sorte que vous devez convertir votre type de date à un type de texte avant de le transmettre à s'unir:

COALESCE(CONVERT(VARCHAR(100), BirthDateTime), '') AS DOB, 
0

pour SQL Server

aller avec

SELECT ISNULL(DOB,'') AS DOB FROM TABLE 
+1

Cela ne fonctionnera pas, les deux arguments de 'isnull' doivent avoir le même type – Andomar