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 .
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
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