Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Java Date.toString in TO_DATE von Oracle

Ein Oracle DATE Datentyp hat keine Zeitzone - Sie benötigen einen TIMESTAMP WITH TIMEZONE Datentyp:

SELECT TO_TIMESTAMP_TZ(
         'Thu Nov 24 15:20:52 CET 2016',
         'DY MON DD HH24:MI:SS TZR YYYY'
       )
FROM DUAL

Wenn Sie in ein DATE konvertieren möchten (und die Zeitzonenregion ist immer CET ) dann können Sie verwenden:

SELECT TO_DATE(
         'Thu Nov 24 15:20:52 CET 2016',
         'DY MON DD HH24:MI:SS "CET" YYYY'
       )
FROM DUAL

Wenn Sie es als DATE wünschen Datentyp und um die Zeitzone in der ursprünglichen Zeichenfolge zu respektieren, müssen Sie sie (1) in einen TIMESTAMP WITH TIMEZONE konvertieren Datentyp; (2) diesen Wert in eine standardisierte Zeitzone umwandeln (dafür wird häufig UTC verwendet); dann (3) wandle das in ein Datum um:

SELECT CAST(
         TO_TIMESTAMP_TZ(
           'Thu Nov 24 15:20:52 CET 2016',
           'DY MON DD HH24:MI:SS TZR YYYY'
         )
         AT TIME ZONE 'UTC'
         AS DATE
       )
FROM   DUAL;

Dadurch wird das Datum 2016-11-24 14:20:52 ausgegeben (die UTC-Darstellung des Eingabedatums).