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

PL/SQL Oracle Discussion :

Conversion timestamp vers date


Sujet :

PL/SQL Oracle

  1. #1
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut Conversion timestamp vers date
    Salut a tous,

    oracle 11g sous linux
    Soit une table TEST avec un champ fecha(date) de type NUMBER
    Dans le champs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select fecha "date" from test;
     
          date
    ----------
    1,0819E+12

    Ce que je voudrais c'est faire une select et dortir la date qui corespond.
    J'ai Googeler un peu et j'ai trouvé la fonction suivante:

    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
    24
    25
    26
    27
    28
    29
    SQL> CREATE OR REPLACE
      2      FUNCTION unixts_to_date(unixts IN PLS_INTEGER) RETURN DATE IS
      3          /**
      4           * Converts a UNIX timestamp into an Oracle DATE
      5           */
      6          unix_epoch DATE := TO_DATE('19700101000000','YYYYMMDDHH24MISS');
      7          max_ts PLS_INTEGER := 2145916799; -- 2938-12-31 23:59:59
      8          min_ts PLS_INTEGER := -2114380800; -- 1903-01-01 00:00:00
      9          oracle_date DATE;
     10
     11          BEGIN
     12
     13              IF unixts> max_ts THEN
     14                  RAISE_APPLICATION_ERROR(
     15                      -20901,
     16                      'UNIX timestamp too large for 32 bit limit'
     17                  );
     18              ELSIF unixts <min_ts THEN
     19                  RAISE_APPLICATION_ERROR(
     20                      -20901,
     21                      'UNIX timestamp too small for 32 bit limit' );
     22              ELSE
     23                  oracle_date := unix_epoch + NUMTODSINTERVAL(unixts, 'SECOND');
     24              END IF;
     25
     26              RETURN (oracle_date);
     27
     28  END;
     29  /
    Function created.

    Mais...ça donne l'erreur que vous pouvez voir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> select unixts_to_date(1081936800000) from dual;
    select unixts_to_date(1081936800000) from dual
           *
    ERROR at line 1:
    ORA-20901: UNIX timestamp too large for 32 bit limit
    ORA-06512: en "EXPLO.UNIXTS_TO_DATE", linea 13
    Ça serait plus facil avec un champ de type timestamp mais la base n'a pas ete faite comme ça. Existe t'il une solution?
    D'avance merci

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Multipliez vos données par 1E-6 avant de les passer dans la fonction.

  3. #3
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonjour
    pardon de demander, mais comment ça se traduit en SQL cette multiplication?

    Si j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select unixts_to_date(1081936800000) from dual;
    il faut que je fasse ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select unixts_to_date(1081936800000*1E-6) from dual;
    Ca marche mais je suis pas sur que le resultat soit le correct...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select unixts_to_date(1081936800000*1E-6) from dual;
     
    UNIXTS_T
    --------
    13/01/70
    car avec plusieurs timestamp defferents j'ai toujours le meme resultat.

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Est-ce que comme ça vos dates ont plus de signification ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> SELECT unixts_to_date(1081936800000*1E-3) FROM dual;
     
    UNIXTS_TO_DATE(1081936800000*1
    ------------------------------
    14/04/2004 10:00:00

  5. #5
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonjour

    whaaaa voila cette fois ça marche bien.
    Merci beaucoup

    Bon week end a tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pb conversion TimeStamp To date
    Par flora806 dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2007, 15h01
  2. Conversion timestamp vers date avec oracle 9.2
    Par gaboo_bl dans le forum Oracle
    Réponses: 5
    Dernier message: 27/11/2006, 14h10
  3. Conversion timestamp en date
    Par devjcc dans le forum Langage
    Réponses: 6
    Dernier message: 21/09/2006, 15h34
  4. conversion date timestamp vers date mysql
    Par seb0026 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/10/2005, 19h48
  5. Conversion Timestamp vers varchar
    Par stejutt dans le forum SQL
    Réponses: 4
    Dernier message: 08/01/2004, 08h46

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