2017-06-12 3 views
0

Ich habe eine Datumsspalte in der Quelle, die als varchar (255) definiert ist. Ich möchte das in Timestamp umwandeln (0). Ich benutze die folgende Abfrage:Ungültiges Datum in Teradata angegeben - varchar date to timestamp (0)

SEL CAST(CAST(SERIND AS CHAR(10)) || ' 00:00:00' AS TIMESTAMP(0)) 
FROM DP_BOX.SOC1 
WHERE SERIND ='20130518' 

Ich bekomme ungültige Zeitstempel hier. Beispiel SERIND sind

20170509 
00000000 

Kann mir bitte jemand dabei helfen?

Antwort

0

können Sie versuchen, CAST mit korrektem Format von

SEL CAST(SERIND as TIMESTAMP(0) FORMAT 'YYYYMMDDHHMISS') 
FROM DP_BOX.SOC1; 
+0

Nein, es gibt ungültigen Zeitstempel. :( – user3901666

0

Du wirst CAST() den Weg zu einem Datumsformat haben, die als Bestandteil von einem Zeitstempel in Teradata akzeptabel ist. (Ich denke, dass es eine Verknüpfung mit Mathe geben kann, um auch zu einem numerischen Format zu kommen, aber ich muss darauf noodle.)

Angenommen, SERIND ist CHAR (8) zu beginnen. Die erste CAST() bringt Sie zu einem DATE Wert mit einem kompatiblen Format. Die zweiten CAST() bekommt man ein DATE mit 10 Zeichen-Format, so dass, wenn Sie es an den TIME Teil des Zeitstempels der resultierende Zeichenumwandlung des DATE Wertes verketten in dem richtigen 10-Zeichenformat ist ausdrücklich als CAST() in einen TIMESTAMP Wert:

SELECT CAST(CAST(CAST(SERIND AS DATE FORMAT 'YYYYMMDD') 
       AS DATE FORMAT 'YYYY-MM-DD') || ' 00:00:00' AS TIMESTAMP(0)) 
    FROM DP_BOX.SOC1 
WHERE SERIND > '00000000'; -- Invalid Date value 
+2

Sie können dies in einem Schritt tun: 'wählen Cast (als Zeitstempel (0) Format" YYYYMMDD ') ". – Andrew

+0

@Rob Versuchte diese Methode, aber immer noch ungültige Datum :( – user3901666

+0

@andrew funktioniert nicht, wie ich habe 00000000 Auch in meinem Datumsfeld – user3901666