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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Points : 13
    Points
    13
    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
    Points : 4 926
    Points
    4 926
    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 à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Points : 13
    Points
    13
    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
    Points : 4 926
    Points
    4 926
    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 confirmé

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    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 à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Points : 13
    Points
    13
    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

  7. #7
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par JeffK
    En revanche il faut que le champs soit du type TIMESTAMP WITH TIMEZONE
    regarde mon exemple ci-dessus avec TIMESTAMP. ça a l'air de marcher aussi, non?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par laurentschneider
    regarde mon exemple ci-dessus avec TIMESTAMP. ça a l'air de marcher aussi, non?

    OUI désolé cela marche aussi avec TIMESTAMP simplement !

    Merci pour vos réponses

  9. #9
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    ok, pas de problème

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Juste une question de plus,

    Comment se fait il que lors de l'insertion, le Timezone des données par defaut est celui de la machine cliente qui a fait l'insert des données ?

    En effet, lorsque j'execute l'export des données vers la base Oracle (qui est en GMT+00:00 --> select DBTIMEZONE from dual; donne +00:00) avec une machine en GMT+02:00, les données de type TIMESTAMP sont affiché en GMT+02:00.
    Avec une machine en GMT-06:00, les données sont affichés en -06:00
    Une fois que les données sont insérées, elle apparaissent avec ce timezone quelque soit la config du client utilisé.

    j'ai essayé de modifer le param de session avant l'insert mais cela ne change rien.
    alter session set TIME_ZONE='+00:00';


    j'espere avoir été clair, si vous avez une idée ...

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