IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[SQL][Timestamp] obtenir une date GMT


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Par défaut [SQL][Timestamp] obtenir une date GMT
    Bonjour,

    J'utilise actuellement un ETL qui exporte des données vers une base Oracle10g.
    Je m'apercoit en fait que les données de type date sont exprimés en GMT+2 (2heures de plus que dans la source).
    J'ai l'impression que c'est le GMT de la machine qui insere dans la base qui est pris en compte. (config du client oracle, ou du systeme ? )

    Par exemple quand je fais un un select sur une date j'obtien :17/09/04 16:48:51 +02:00

    Ma question est de savoir si il est possible d'obtenir la date en GMT
    soit dans ce cas :17/09/04 14:48:51 +00:00

    Merci @++

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    ne pas confondre "date" et "timestamp"

    Les "dates" n'ont pas de timezones. Les "timestamps" ont un timezone. Qui peut être SESSIONTIMEZONE ou DBTIMEZONE

    Pour obtenir l'heure GMT tu peux faire soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SCOTT@LSC01> select sys_extract_utc(systimestamp) from dual;
    SYS_EXTRACT_UTC(SYSTIMESTAMP)
    ---------------------------------------------------------------------------
    20.07.06 10:28:45.641141
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SCOTT@LSC01> select systimestamp at time zone 'GMT' from dual;
    SYSTIMESTAMPATTIMEZONE'GMT'
    ---------------------------------------------------------------------------
    20.07.06 10:30:14.013408 GMT
    voire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SCOTT@LSC01> alter session set time_zone='GMT';
     
    Session altered.
     
    SCOTT@LSC01> select localtimestamp from dual;
    LOCALTIMESTAMP
    ---------------------------------------------------------------------------
    20.07.06 10:30:49.883235
    si tu utilises des types TIMESTAMP WITH LOCAL TIME ZONE

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Par défaut
    Merci laurentschneider,
    Ces requetes permettent d'obtenir la date courante en GMT.
    Mais est il possible de faire pareil avec une date d'une table utilisateur ?

    par exemple dans mon cas j'ai essayé

    select MaDate at time zone 'GMT' from Table;
    ou
    select sys_extract_utc(MaDate) from Table;

    mais cela ne fonctionne pas ...

    MaDate est un timestamp dans ce cas

    Merci

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    SCOTT@LSC01> create table t (t timestamp);
     
    Table created.
     
    SCOTT@LSC01> insert into t values (systimestamp);
     
    1 row created.
     
    SCOTT@LSC01> select * from t;
    T
    ---------------------------------------------------------------------------
    20.07.06 14:42:31.925894
     
    SCOTT@LSC01> desc t
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     T                                                  TIMESTAMP(6)
     
    SCOTT@LSC01> select sys_extract_utc(t) from t;
    SYS_EXTRACT_UTC(T)
    ---------------------------------------------------------------------------
    20.07.06 12:42:31.925894
    ça devrait fonctionner, que te donnes desc ta_table

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Par défaut
    et en continuant l'exemple de Laurent schneider, voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
           select 
           to_char(
           FROM_TZ(CAST(t AS TIMESTAMP), 'America/New_York') AT TIME ZONE 'Europe/Paris',
           'YYYY-MM-DD HH24:MI:SS')
           from t
    qui nous fais le changement d'horaire.
    Ma requête transforme ici les dates utilisateurs supposées dans le timezone US au timezone europe

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Par défaut
    Merci à vous,
    cela fonctionne:

    SELECT SYS_EXTRACT_UTC(MaDate)
    FROM T;

    En revanche il faut que le champs soit du type TIMESTAMP WITH TIMEZONE

Discussions similaires

  1. [SQL] Ajouter une durée à une date et obtenir une date valide
    Par bigltnt dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/06/2007, 14h55
  2. comment obtenir une date dans une storeproc?
    Par Dnx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/10/2005, 15h19
  3. Comment comaprer un timestamp et une date en SQL
    Par Samuel25_t dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/06/2005, 21h38
  4. []Comment convertir une date GMT en date vb ?
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 11/08/2004, 16h01
  5. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo