J'ai un champ avec une date/heure comme ceci:
2009-11-17 18:40:05
C'est en UTC. Dans la requête, comment puis-je convertir ceci en EST?
J'essaie quelque chose comme ça mais ça 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
J'ai dû le modifier légèrement pour qu'il fonctionne dans 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 "au fuseau horaire".
Si vous souhaitez convertir un champ de date d'UTC en HNE, 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
Tout d'abord, je transforme le champ de date souhaité (sous la forme DATE_FIELD) en un horodatage. Le résultat de la conversion 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 sommes en train de changer.
Ensuite, je renvoie les résultats de cette fonction au type DATE et lui donne un alias.
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