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

SQL Oracle Discussion :

Transformation de date Oracle en timestamp


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Par défaut Transformation de date Oracle en timestamp
    Bonjour,

    Je travail sur un projet qui nécessite d'importer des données d'une base oracle vers une base mysql.

    Mon petit problème concerne le format de la date.

    En effet après une recherche google infructueuse je ne trouve pas un moyen simple et rapide de transformer ma date Oracle au format "DATE" en date au format timestamp dans mysql (un int de ce style : 1253182162)

    Lors de ma requête oracle j'ai écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT .... TO_CHAR(R.START_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS'), TO_CHAR(R.END_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS')...
    FROM ...
    Ce qui aura pour conséquence de rentrer une date de ce type YYYY-MM-DD HH24:MI:SS dans les colonnes date de ma base mysql.

    Si je n'utilise pas le TO_CHAR(....) la date aura ce format : dd/mm/yy

    Comme vous l'avez compris je cherche à transformer cette date en nombre de seconde (timestamp) écoulé depuis le 1er janvier 70 facilement. Que ce soit au moment de l'insert ou du select, ou une petite maj en php... peu importe ! Je n'ai pas envie de rajouter des dizaines de lignes de calculs alors qu'on peut certainement faire plus simple

    (A noter que je travail avec php.)

  2. #2
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Est ce que c est un truc comme ca que tu cherche ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select EXTRACT(Day From D) * 24 * 60 * 60 + EXTRACT(HOUR From D) * 60 * 60 + EXTRACT(MINUTE From D) * 60 + EXTRACT(Second From D) TS
      From (Select SYSTIMESTAMP - TO_DATE('01/01/1970', 'dd/mm/yyyy') D
              From DUAL)

  3. #3
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Vu que je ne sais pas si Oracle et MySQL utilisent le même format de stockage des dates et des timestamps, je ne te conseillerai pas de faire comme ça. Utilise une fonction dans Oracle pour convertir ta date en chaîne de caractères (to_char) puis une fonction dans MySQL pour convertir ta chaîne de caractères en date.
    La chaîne de caractère sert donc de format d'interface indépendant du stockage technique des 2 bases.

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Par défaut
    merci beaucoup de vos réponses.
    Tu avais certainement raison nuke. Au début j'ai essayé avec ton aide spdev666, mais l'opération était délicate.

    En revanche, voici le code (tout bête finalement) que j'ai utilisé...

    Je fais ma requête Oracle de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT TO_CHAR(R.START_TIMESTAMP,'DD/MM/YYYY/HH24/MI/SS'),
    TO_CHAR(R.END_TIMESTAMP,'DD/MM/YYYY/HH24/MI/SS')
    FROM  MABASE";
    Puis avant l'insert dans ma base sql, je fais les quelques traitement pour transformer cette donné en timestamp unix.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function convert_date_ora_to_ts($date) {
       list($jour, $mois, $annee, $heure, $minute, $seconde) = explode("/", $date);
       return mktime($heure,$minute,$seconde,$mois,$jour,$annee);
    }
    Facile en fait Beaucoup de prise de tête pour rien...

  5. #5
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 17
    Par défaut diff dates en secondes
    plus simple encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ((to_char(sysdate,'J')-to_char(to_date('01/01/1970','dd/mm/yyyy'),'J')) *    86400) + to_char(sysdate,'SSSSS')  from dual;
    votre colonne a la place de sysdate

Discussions similaires

  1. Conversion d'un Timestamp Unix en date Oracle
    Par bertrand2012 dans le forum SQL
    Réponses: 7
    Dernier message: 04/07/2012, 18h09
  2. [SQL] Transformer une date d'un calendrier en timestamp pour trie
    Par Seta-san dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/10/2007, 20h37
  3. Date parser un timestamp
    Par jeb001 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 24/10/2005, 16h01
  4. [JDBC] String => Date Oracle
    Par mr.t dans le forum JDBC
    Réponses: 22
    Dernier message: 16/02/2005, 18h51
  5. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31

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