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),'')
sql-server
sql-server-2012
datetime
Juan Velez
la source
la source
NULL
dates, c'est direSELECT CAST('' AS DATE)
. De quel type de données s'agit-ilDOB
?Réponses:
Vous ne pouvez pas obtenir une chaîne vide car vous renvoyez le
DATE
type de valeur à partir deISNULL
.Par MSDN ,
ISNULL
Si vous vérifiez si la valeur est ou non
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:
Qui reviendra
si la valeur est
NULL
.Une
NULL
date estNULL
(sans valeur). Une chaîne vide, en revanche, est évaluée comme0
, qui dans SQL Server est implicitement un entier représentant le nombre de jours écoulés depuis1900-01-01
.la source
Si vous cherchez à renvoyer une valeur pour DOB lorsqu'elle est remplie et supprimez la valeur nulle lorsqu'il n'y a pas de DOB remplie. Vous pouvez essayer cela, mais le DOB sera un varchar et non un type de date.
la source
VARCHAR
to aDATE
et back to aVARCHAR
n'a aucun sens. Lorsque vous supprimez ce non-sens, votre réponse est la même que la réponse acceptée avec moins d'expositions.datetime
seule date nécessaireYYYY-MM-DD
. Donc en coulant commedate
je laisse tomber le temps. Le fait de lancer levarchar
permet d'utiliser laisnull
fonction. Je reçois donc toujours une date pour les enregistrements remplis et je supprime les valeurs nulles. Sinon, je devenais1900-01-01 00:00:00.000
.Cela convertira la date NULL en espace. La couche d'application (Excel) gère très bien l'espace
la source
Créez simplement une vue
CREATE VIEW test_view
AS
SELECT cas où année (DOB) <= 1900 puis null sinon DOB fin comme DOB, quelque part, id du test;
puis utilisez-le à la place du tableau d'origine: sélectionnez * dans test_view
la source
utilisation
sélectionnez isnull (Convert (Varchar (500), Date, 106), '')
ça marche
la source