it-swarm.com.de

SQL Server Isnull Gibt 1900-01-01 zurück, wenn das Feld null ist

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 das ist es nicht. Wie soll ich vorgehen, um die gewünschten Ergebnisse zu erzielen?

isnull(convert(date,DOB,1),'')
15
Juan Velez

Sie können keine leere Zeichenfolge erhalten, da Sie den Werttyp DATE von ISNULL zurückgeben.

Per MSDN , ISNULL

Gibt den gleichen Typ wie check_expression zurück. Wenn als check_expression ein Literal NULL angegeben wird, wird der Datentyp des Ersatzwerts zurückgegeben. Wenn ein Literal NULL als check_expression angegeben wird und kein Ersatzwert angegeben wird, wird ein int zurückgegeben.

Wenn Sie überprüfen, ob der Wert NULL ist oder nicht, müssen Sie ihn nicht in ein Datum konvertieren, es sei denn, Sie möchten einen Datumswert zurückgeben (den Sie anscheinend nicht zurückgeben).

Verwenden Sie stattdessen:

SELECT ISNULL( DOB , '')

Welches wird zurückkehren

''

wenn der Wert NULL ist.

Ein NULL Datum ist NULL (kein Wert). Eine leere Zeichenfolge ergibt dagegen 0, die in SQL Server implizit eine Ganzzahl ist, die die Anzahl der Tage seit 1900-01-01.

21
LowlyDBA