it-swarm.com.de

Oracle 9: Konvertieren Sie das Datum vom Format MM / TT / JJJJ HH: MM: SS in das Format iso8601 mit datierter Datumszeit

Hinweis: Ich habe nur Lesezugriff auf diese Datenbank.

Ich muss einen Oracle 9-Datumstyp vom Format TT/MM/JJJJ HH: MM: SS in den Standard ISO8601 konvertieren. Wie das folgende Beispiel:

4/22/2015 12:02:56 AM => 2015-04-22T04:02:56.000Z

Unten finden Sie eine Abfrage, mit der ein Oracle-Datumstyp in eine Zeichenfolge im iso8601-Format konvertiert wird. Ich benötige ein mit is8601 formatiertes Datum.

SELECT sysdate,
    to_char((from_tz(to_timestamp(to_char(sysdate, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'America/New_York') at time zone 'UTC'),'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"') "iso8601"
FROM dual

Vielen Dank für jede Hilfe.


EDIT : Das Endziel besteht darin, diese Daten zu erfassen und als Datumsangaben in eine Postgres-Datenbank einzufügen, die eine Rails App) unterstützt .

5
Kurt Mueller

Sie sollten SYSTIMESTAMP anstelle von SYSDATE verwenden, um Sekundenbruchteile zu erhalten (was Sie, wie ich annehme, wünschen).

SYSTIMESTAMP gibt den Datentyp TIMESTAMP WITH TIME ZONE zurück, daher müssen Sie nicht explizit angeben.

So ist es:

SELECT
    TO_CHAR(
        SYSTIMESTAMP AT TIME ZONE 'UTC',
        'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"'
    )
FROM dual
6
SQL> alter session set nls_timestamp_format = 'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"';

Session altered.

SQL> select cast (sysdate as timestamp) from dual;

CAST(SYSDATEASTIMESTAMP)
---------------------------------------------------------------------------
2015-07-18T01:26:09.000Z
1
Balazs Papp