2009-11-17 12 views
12

Ho un campo con un valore di data/ora come questo:Converti timestamp data/ora da UTC a EST Oracle SQL

2009-11-17 18:40:05 

E 'in UTC. Nella query, come posso convertirlo in EST?

Sto provando qualcosa del genere ma genera un errore.

// datetime is the field name 
SELECT 
    FROM_TZ(TIMESTAMP TO_DATE(datetime, 'yyyy-mm-dd hh24miss'), 'EST') AS DT 
FROM 
    db_name 

risposta

15

ho dovuto modificare leggermente per farlo funzionare sul mio database, ma questo ha funzionato:

select from_tz(to_timestamp('2009-11-17 18:40:05','yyyy-mm-dd hh24:mi:ss'), 'UTC') 
at time zone 'America/New_York' from dual 

La chiave è la sintassi "a fuso".

+0

Grazie, ho appena scoperto che la data era nel formato sbagliato, Duh :) –

+0

Che cos'è la sintassi "TIMEZONE TO_DATE (...)"? Non l'ho mai visto prima. – Dan

+3

La specifica di valori letterali di data/ora è più semplice con la sintassi ANSI, quindi è possibile sostituire "to_timestamp ('2009-11-17 18:40:05', 'aaaa-mm-gg hh24: mi: ss')" con "timestamp '2009 -11-17 18:40:05 '"... un po' più compatto –

0
select to_char(systimestamp at time zone 'EST','HH') EST_TIME, 
    TO_CHAR(SYSDATE,'HH') EDT_TIME, 
    NEW_TIME(SYSDATE, 
     (
      CASE 
       WHEN to_char(systimestamp at time zone 'EST','HH') = TO_CHAR(SYSDATE,'HH') 
       THEN 'EST' 
       ELSE 'EDT' 
      END 
     ),'GMT') 
    from dual 
2

Se si desidera convertire un campo data da UTC a EST, questo ha funzionato per me:

CAST(FROM_TZ(CAST(DATE_FIELD AS TIMESTAMP), 'UTC') 
at time zone 'America/New_York' AS Date) as DESIRED_FIELD_NAME 

In primo luogo, ho lanciato il campo data desiderata (come DATE_FIELD) per un timestamp. Il risultato del cast è il primo parametro della funzione FROM_TZ, che richiede che il parametro sia di tipo TIMESTAMP. Il secondo parametro è 'UTC', poiché è da quello che stiamo cambiando.

Quindi, trasmetto i risultati di tale chiamata di funzione per digitare DATE e assegnargli un alias.