web-dev-qa-db-fra.com

Oracle 9: Convertir la date du format jj / mm / aaaa hh: mm: ss en date / heure formatée iso8601

Remarque: je n'ai qu'un accès en lecture à cette base de données.

J'ai besoin de convertir un type de date Oracle 9 du format j/mm/aaaa hh: mm: ss au standard iso8601. Comme l'exemple ci-dessous:

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

Vous trouverez ci-dessous une requête qui convertira un type de date Oracle en une chaîne au format iso8601. J'ai besoin d'une date au format is8601.

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

Merci pour toute aide.


EDIT : Le but final est de saisir ces dates et de les insérer comme datetimes dans une base de données postgres qui alimente une application Rails .

5
Kurt Mueller

Vous devriez utiliser SYSTIMESTAMP au lieu de SYSDATE, afin d'obtenir des fractions de seconde (que vous désirez comme je suppose).

SYSTIMESTAMP renvoie le type de données TIMESTAMP WITH TIME ZONE, vous n'avez donc pas à le spécifier explicitement.

Donc c'est:

SELECT
    TO_CHAR(
        SYSTIMESTAMP AT TIME ZONE 'UTC',
        'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"'
    )
FROM dual
6
Wernfried Domscheit
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