web-dev-qa-db-fra.com

Conversion de fuseau horaire dans une requête SQL

J'utilise une requête pour obtenir une date de réception d'application d'Oracle DB qui est stockée en tant que GMT. Maintenant, je dois convertir cela en heure d'été standard/heure d'été lors de la récupération. J'utilise la requête ci-dessous pour cela:

   select to_char (new_time(application_recv_date,'gmt','est'), 'MON dd, YYYY') from application

Cela fonctionne bien pour l'heure standard. Mais pour l'heure d'été, nous devons le convertir en "edt" en fonction des informations de fuseau horaire. Je ne sais pas trop comment procéder. Sil te plait aide moi

9
satyanarayana

Vous pouvez utiliser cette requête, sans avoir à vous soucier des changements de fuseau horaire.

select to_char(cast(application_recv_date as timestamp) at time zone 'US/Eastern',
               'MON dd, YYYY'
              )
from application;

Ex:

EDT:

select cast(date'2014-04-08' as timestamp) d1,
       cast(date'2014-04-08' as timestamp) at time zone 'US/Eastern' d2
from dual;

D1                                 D2
---------------------------------- -------------------------------------------
08-APR-14 12.00.00.000000 AM       07-APR-14 08.00.00.000000 PM US/EASTERN

EST:

select cast(date'2014-12-08' as timestamp) d1,
       cast(date'2014-12-08' as timestamp) at time zone 'US/Eastern' d2
from dual;

D1                                 D2
---------------------------------- -------------------------------------------
08-DEC-14 12.00.00.000000 AM       07-DEC-14 07.00.00.000000 PM US/EASTERN

METTRE À JOUR:

Merci à Alex Poole d'avoir rappelé que, lorsque le fuseau horaire n'est pas spécifié, le fuseau horaire local est utilisé pour la conversion.

Pour forcer la date à être reconnue comme GMT, utilisez from_tz.

from_tz(cast(date'2014-12-08' as timestamp), 'GMT') at time zone 'US/Eastern'
10
Noel

Dans Oracle, vous pouvez y parvenir avec la requête ci-dessous:

Select current_timestamp, current_timestamp at time zone 'Australia/Sydney' from dual;

Australia/Sydney est le nom de votre fuseau horaire dans lequel vous souhaitez convertir votre heure.

1
Jitender Kumar