¿Cómo puedo convertir esta cadena en una fecha o marca de tiempo?

'04 -Nov-2014 10:16:20 AM -0500 '

Lo intenté:

select to_date('04-Nov-2014 10:16:20 AM -0500', 'DD-MON-YYYY HH:MI:SS AM TZH') FROM dual;

Que da error:

ORA-01821: date format not recognized
0
beginner_ 16 oct. 2018 a las 11:53

2 respuestas

La mejor respuesta

El tipo de datos DATE no admite ninguna información de zona horaria, por lo que debe usar el tipo de datos TIMESTAMP WITH TIME ZONE si desea usarlo. También debe considerar el idioma de la fecha que establece el usuario actual NLS-Settings.

Entonces -5000 no coincide con TZH, prueba este:

select 
  TO_TIMESTAMP_TZ('04-Nov-2014 10:16:20 AM -0500', 'DD-MON-YYYY HH:MI:SS AM TZHTZM', 'NLS_DATE_LANGUAGE = American') 
FROM dual;
1
Wernfried Domscheit 16 oct. 2018 a las 09:00

Debe utilizar TO_TIMESTAMP_TZ, que puede analizar la información de la zona horaria:

SELECT
    TO_TIMESTAMP_TZ('04-Nov-2014 10:16:20 AM -0500', 'DD-MON-YYYY HH:MI:SS AM TZHTZM')
FROM dual;

Demo

Las fechas de Oracle no conservan ninguna información de zona horaria, por lo que debe usar la marca de tiempo.

0
Tim Biegeleisen 16 oct. 2018 a las 09:53