Der folgende Code gibt 1900-01-01 zurück, wenn das DOB-Feld null ist. Ich wollte (und erwartete), dass es eine leere Zeichenfolge ('') zurückgibt, aber es ist nicht. Wie soll ich vorgehen, um die gewünschten Ergebnisse zu erzielen?
isnull(convert(date,DOB,1),'')
sql-server
sql-server-2012
datetime
Juan Velez
quelle
quelle
NULL
sagen Sie, was Sie mit Datteln tunSELECT CAST('' AS DATE)
. Welcher Datentyp istDOB
?Antworten:
Sie können keine leere Zeichenfolge abrufen, da Sie den
DATE
Werttyp von zurückgebenISNULL
.Per MSDN ,
ISNULL
Wenn Sie prüfen, ob der Wert
NULL
ein Datum ist, müssen Sie ihn nicht in ein Datum umwandeln, es sei denn, Sie möchten einen Datumswert zurückgeben (was Sie anscheinend nicht möchten).Verwenden Sie stattdessen:
Welches wird zurückkehren
wenn der Wert ist
NULL
.Ein
NULL
Datum istNULL
(kein Wert). Eine leere Zeichenfolge hingegen0
ergibt, was in SQL Server implizit eine Ganzzahl ist, die die Anzahl der Tage seit dem darstellt1900-01-01
.quelle
Wenn Sie einen Wert für DOB zurückgeben möchten, wenn er ausgefüllt ist, und den Nullwert entfernen möchten, wenn kein DOB ausgefüllt ist. Sie können dies versuchen, aber das DOB ist ein varchar und kein Datumstyp.
quelle
VARCHAR
nach aDATE
und zurück zu aVARCHAR
ergibt keinen Sinn. Wenn Sie diesen Unsinn entfernen, entspricht Ihre Antwort der akzeptierten Antwort mit weniger Erläuterungen.datetime
Datum begonnen, für das nur ein Datum erforderlich istYYYY-MM-DD
. Also beim Casting wiedate
ich die Zeit vergesse. Das anschließende Castingvarchar
ermöglicht die Nutzung derisnull
Funktion. Also bekomme ich immer noch ein Datum für die ausgefüllten Datensätze und entferne die Nullwerte. Ansonsten bekam ich1900-01-01 00:00:00.000
.Das wird das NULL-Datum in Leerzeichen konvertieren. Die Anwendungsebene (Excel) verarbeitet den Platz gut
quelle
Erstellen Sie einfach eine Ansicht
CREATE VIEW test_view
AS
SELECT-Fall, wenn year (DOB) <= 1900, dann null, sonst endet DOB als DOB, sometext, id from test;
Verwenden Sie stattdessen die Originaltabelle: Wählen Sie * aus test_view
quelle
verwenden
wähle isnull (Konvertieren (Varchar (500), Datum, 106), '')
es funktioniert
quelle