SQL server: Umwandlung von Null date timeen

Ich habe eine Abfrage in SSMS, die 1900-01-01 zurückkehrt, wie kann ich einen CASE WHEN genau zu replace 1900-01-01 mit '' (ein leeres nicht ein Null).

 CAST(ISNULL(CAST(CONVERT(DATE, cmmt.[CmmtExpirationDate], 101) AS NVARCHAR(20)), '') AS DATE) AS [Cmmt Expiration Date] 

Ergebnis: 1900-01-01

Ich habe versucht, aber kein Glück (schreckliche Syntax):

 CASE WHEN (CAST(ISNULL(cast(convert(Date, cmmt.[CmmtExpirationDate] , 101) as nvarchar(20)), '') = '1900-01-01') THEN '' ELSE CAST(ISNULL(cast(convert(Date, cmmt.[CmmtExpirationDate] , 101) as nvarchar(20)),'') AS DATE END 

   

Das Ergebnis Ihres Ausdrucks muss einen festen datatyp haben. DATE ist nicht möglich, da '' kein gültiges date ist. nvarchar(20) wäre eine Option, aber das bedeutet, dass dein Ergebnis ein String sein wird, auch wenn es nicht 1900-01-01 .

Sobald Sie das akzeptieren, ist die Lösung einfach:

 CASE WHEN cmmt.[CmmtExpirationDate] = '1900-01-01' THEN CONVERT(nvarchar(20), cmmt.[CmmtExpirationDate]) ELSE CONVERT(nvarchar(20), '') END 

Vielleicht möchten Sie das gewünschte Ausgabeformat als dritten Parameter für die erste CONVERT statement CONVERT .

(Ich CmmtExpirationDate davon aus, dass CmmtExpirationDate vom Typ DATE , denn wenn es nicht ist, sollte es in der Frage erwähnt worden sein.)

Sie können try_convert wie folgt verwenden:

 try_convert(date, case when datecolumn='' then null else datecolumn end)