2017-08-28 10 views
0

Wenn das Datum NULL ist, möchte ich 'N/A' anzeigen, aber wenn das Datum nicht Null ist, möchte ich das Datum in dB anzeigen. Dies ist, was ich derzeit habe, und ich bekomme einen DataType Mismatch in den THEN/ELSE-Ausdrücken. Ich gehe davon aus, dass ich versuche, ein Zeichen in einem Datumsfeld anzuzeigen.CASE WHEN Datatype Mismatch

SELECT 
CASE WHEN created_at IS NULL 
    THEN 'N/A' 
    ELSE created_at 
END AS created_at 
FROM example.example_id 

Ist das möglich?

+1

Sie gefragt, Nein. Eine Spalte darf nicht mehr als einen Datentyp haben. Sie könnten "created_At" als Varchar (oder als Textdatentyp) verwenden und es würde funktionieren, aber ohne den Typ zu ändern, ist dies nicht möglich. – xQbert

Antwort

0

Ihre Annahme ist richtig: Sie können einen Datums- (Zeit-) Datentyp nicht mit einem Varchar-Datentyp mischen. Die Lösung ist das Datum zu einem varchar würfen

SELECT CASE WHEN created_at IS NULL THEN 'N/A' 
      ELSE CAST (created_at as char(8) format 'YYYYMMDD') 
     END AS created_at 
FROM example.example_id 

der Konvertit hier müssen einige Optimierungen je nachdem, wie Sie es angezeigt.

+0

Wenn Teradata nicht über eine Konvertierungsfunktion verfügt, müssen möglicherweise noch weitere Optimierungen vorgenommen werden. –

+0

@DanBracuk, verpasste das Teradata-Tag. Bearbeitet. – HoneyBadger

0

einfach können Sie

SELECT CAST(VARCHAR, ISNULL(Created_at, 'N/A')) As 'Created_at' 
FROM example.example_id 
1

versuchen Sie können keine Datentypen mischen.

Wenn Sie sich nur um die Präsentation kümmern, können Sie einfach Ihre Benutzereinstellungen anpassen Ex. SQL-Assistent -> Optionen -> Datenformat -> dann 'Diese Zeichenkette für Null Datenwerte anzeigen' als 'NA'.

0

Statt CASE können Sie COALESCE verwenden, auch, aber Sie müssen noch das Datum in eine Zeichenfolge konvertieren zuerst: „Ist das möglich“

Coalesce(To_Char(created_at, 'yyyy-mm-dd'), 'N/A')