2011-12-28 13 views
23

Intenté convertir un sello de tiempo ("1985-02-07T00: 00: 00.000Z") en una fecha y no tuve éxito en mis varios intentos diferentes.Cómo convertir "1985-02-07T00: 00: 00.000Z" (ISO8601) a un valor de fecha en Oracle?

A continuación se muestra la consulta que he intentado:

select to_date('1985-02-07T00:00:00.000Z', 'YYYY-MM-DDTHH24:MI:SS.fffZ') 
from dual; 

Sus sugerencias son muy apreciadas.

+2

+1 por intentar cosas. Puede mejorar la pregunta al incluir cuáles fueron los resultados y cómo se equivocaron o qué no funcionó en general. (¿Hubo un error? ¿Fue la fecha unas pocas horas?) –

+2

Según [to_date] (http://www.techonthenet.com/oracle/functions/to_date.php) Creo que al menos "fff" está mal y debe ser "FF3". Pero no uso/tengo Oracle :) –

Respuesta

37

to_date convierte la entrada a un tipo DATE que no admite fracciones de segundo. Para usar fracciones de segundo, debe utilizar un tipo TIMESTAMP que se crea al utilizar to_timestamp

El comentario de pst sobre el modificador ff3 también es correcto.

valores "constantes" en la máscara de formato deben ser encerrado en comillas dobles

Así que el resultado final es:

select to_timestamp('1985-02-07T00:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"') 
from dual; 
2

Algunos rules to follow:

  1. literales deben ser doble citado: MM espera un número de mes, "MM" espera una doble-M.
  2. El formato para segundos fraccionarios es FF, no F o FFF. Usted especifica la cantidad de dígitos con un número entero final, p. FF3.
  3. Pero las fechas no pueden contener fracciones de segundos de todos modos por lo que no puede usar FF3 en este contexto.

Esto funciona:

SELECT TO_DATE('1985-02-07T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS') 
FROM dual; 

No sé si hay una manera de hacer caso omiso de las fracciones de segundo en TO_DATE() funciones de manipulación de cadenas por lo que he usado para despojar a cabo:

SELECT TO_DATE(SUBSTR('1985-02-07T00:00:00.000Z', 1, 19), 'YYYY-MM-DD"T"HH24:MI:SS') 
FROM dual; 
8
SQL> select cast(to_timestamp('1985-02-07T00:00:00.000Z', 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') as date) 
    2 from dual 
    3/

CAST(TO_TIMESTAMP(' 
------------------- 
07-02-1985 00:00:00 

1 row selected. 
2
SELECT to_timestamp_tz('2012-08-08T09:06:14.000-07:00','YYYY-MM-DD"T"HH24:MI:SS.FF3TZR') 
FROM dual; 

External table DDL, 
extract_date char(29) DATE_FORMAT timestamp WITH TIMEZONE mask 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZR' 
+0

buen uso de la función _tz. Tuve que usar esto sin embargo: 'AAAA-MM-DD' T "HH24: MI: SS.FF3TZHTZM ' – JoshC13

0

si desea obtener la cadena en formato de fecha y hora a continuación, tratar este ....

select to_char(TO_DATE('2012-06-26T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"'),'yyyy-MM-dd hh:mm:ss PM') as EVENT_DATE from dual 

EVENT_DATE 
----------------------- 
2012-06-26 12:06:00 AM 

sólo para la fecha sólo tiene que utilizar ...

select TO_DATE('2012-01-06T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"') from dual 
Cuestiones relacionadas