La seguente parte di codice restituisce 1900-01-01 quando il campo DOB è null. Volevo (e mi aspettavo) che restituisse una stringa vuota ('') ma non lo è. Come devo procedere per ottenere i risultati desiderati?
isnull(convert(date,DOB,1),'')
La seguente parte di codice restituisce 1900-01-01 quando il campo DOB è null. Volevo (e mi aspettavo) che restituisse una stringa vuota ('') ma non lo è. Come devo procedere per ottenere i risultati desiderati?
isnull(convert(date,DOB,1),'')
Risposte:
Non puoi ottenere una stringa vuota perché stai restituendo il DATE
tipo di valore da ISNULL
.
Per MSDN ,ISNULL
Restituisce lo stesso tipo di check_expression. Se viene fornito un valore NULL letterale come check_expression, restituisce il tipo di dati di sostituzione_valore. Se viene fornito un valore NULL letterale come check_expression e non viene fornito alcun valore sostitutivo, viene restituito un int.
Se stai verificando se il valore è o meno NULL
, non è necessario convertirlo in una data, a meno che tu non voglia restituire un valore di data (che non sembri).
Invece, usa:
SELECT ISNULL( DOB , '')
Che tornerà
''
se il valore è NULL
.
Una NULL
data è NULL
(nessun valore). Una stringa vuota, d'altra parte, valuta 0
, che in SQL Server è implicitamente un numero intero che rappresenta il numero di giorni da allora 1900-01-01
.
Se si desidera restituire un valore per DOB quando viene popolato e rimuovere il valore null in assenza di DOB popolato. Puoi provare questo, ma il DOB sarà un varchar e non un tipo di data.
isnull(cast(cast(DOB as date)as varchar),'') as DOB (SQL SERVER)
VARCHAR
in a DATE
e tornare a a VARCHAR
non ha alcun senso. Quando rimuovi questa assurdità la tua risposta è la stessa della risposta accettata con meno esposizione.
datetime
data necessaria e solo in YYYY-MM-DD
. Quindi, lanciando mentre date
faccio cadere il tempo. Quindi lanciare il varchar
permette l'uso della isnull
funzione. Quindi ottengo ancora una data per i record popolati e rimuovo i valori null. Altrimenti, stavo ottenendo 1900-01-01 00:00:00.000
.
uso
seleziona isnull (Converti (Varchar (500), Date, 106), '')
sta funzionando
NULL
date sta dicendoSELECT CAST('' AS DATE)
. Che tipo di dati èDOB
?