2009-11-17 4 views
12

J'ai un champ avec une valeur date/heure comme ceci:horodatage Convertir/date heure UTC à Oracle SQL EST

2009-11-17 18:40:05 

Il est en UTC. Dans la question, comment puis-je convertir cela en EST? J'essaye quelque chose comme ceci mais il jette une erreur.

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

Répondre

15

je dû modifier légèrement pour obtenir de travailler sur ma base de données, mais cela a fonctionné:

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 clé est la syntaxe « à fuseau horaire ».

+0

Merci Je viens de trouver que la date était dans le mauvais format, Duh :) –

+0

Qu'est-ce que c'est la syntaxe "TIMEZONE TO_DATE (...)"? Je n'ai jamais vu ça avant. – Dan

+3

La spécification des littéraux d'horodatage est plus facile avec la syntaxe ANSI, vous pouvez donc remplacer "to_timestamp ('2009-11-17 18:40:05', 'aaaa-mm-jj hh24: mi: ss')" par "horodatage '2009 -11-17 18:40:05 '' ... un peu plus compact –

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

Si vous voulez convertir un champ de date UTC à l'Est, cela a fonctionné pour moi:

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

D'abord, je jetai le champ date souhaitée (comme date_field) à un horodatage. Le résultat du cast est le premier paramètre de la fonction FROM_TZ, qui nécessite que le paramètre soit de type TIMESTAMP. Le deuxième paramètre est 'UTC', puisque c'est ce que nous changeons.

Ensuite, je jette les résultats de cet appel de fonction à DATE de type et lui donne un alias.

Questions connexes