web-dev-qa-db-fra.com

Comment obtenir la valeur UTC pour SYSDATE sur Oracle

Probablement un classique ... Connaissez-vous une astuce simple pour récupérer une valeur UTC de SYSDATE sur Oracle (le mieux serait de faire fonctionner quelque chose sur la 8e version également).

Pour l'instant, j'ai une fonction personnalisée :(

À votre santé,

Stefan

39
stic

Vous pouvez utiliser

SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -02:00') FROM DUAL;

Vous devrez peut-être également modifier votre fuseau horaire

ALTER SESSION SET TIME_ZONE = 'Europe/Berlin';

Ou lisez-le

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM dual;
39
Jonathan
select sys_extract_utc(systimestamp) from dual;

Ne fonctionnera pas sur Oracle 8, cependant.

37
Juris

Habituellement, je travaille avec des colonnes DATE, pas avec un TIMESTAMP plus grand mais plus précis.

Ce qui suit renverra la date UTC actuelle juste comme ça - une DATE.

CAST(sys_extract_utc(SYSTIMESTAMP) AS DATE)

Travailler avec des dates UTC est génial car je n'ai pas à me soucier de la complexité des fuseaux horaires. Seul l'affichage final pour l'utilisateur a besoin de décalages ou d'autres problèmes.

19
Charles Burns

Si vous voulez un horodatage au lieu d'une simple date avec sysdate, vous pouvez spécifier un fuseau horaire à l'aide de l'horodatage système:

select systimestamp at time zone 'UTC' from dual

les sorties: 29-AUG-17 06.51.14.781998000 PM UTC

4
Nathan Strutz

J'utilise:

SELECT CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE) FROM DUAL;

Ça marche bien pour moi.

2
Pedro Sobral