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 :

Ajouter deux dates sous Oracle


Sujet :

SQL Oracle

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 221
    Par défaut Ajouter deux dates sous Oracle
    Bonjour

    J'ai dans ma table les données ci-dessous avec deux colonnes DATE_TRT et DATE_FICHIER et DUREE, je voudrais créeer un colonne DATE_FIN qui est en fait la somme de DATE_TRT et DUREE. Je bloques donc à ce niveau. Pouvez-vous m'aider?

    Et comment determiner la date d'un traitement qui débutes la vieille et se termines le lendemain?

    Code sql : 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
     
         DATE_TRT	          DATE_FICHIER 	DUREE	 
     
     05/21/2012 10:34:35	16/05/12	   00:00:09
     05/21/2012 09:10:21	16/05/12	   00:00:04
     05/21/2012 09:10:19	16/05/12	   00:00:06
     05/21/2012 11:37:38	01/05/12	   00:01:10
     05/21/2012 15:31:49	19/05/12	   00:00:09
     05/21/2012 00:34:11	21/05/12	   00:30:50
     05/21/2012 00:46:48	21/05/12	   00:00:20
     05/21/2012 23:33:31	20/05/12	   00:00:07
     05/21/2012 11:25:40	19/05/12	   00:09:13
     05/21/2012 11:25:58	19/05/12	   00:08:24
     05/21/2012 21:43:16	21/05/12	   00:00:19
     05/21/2012 19:30:24	21/05/12	   00:01:09
     05/21/2012 20:41:12	21/05/12	   00:01:14

  2. #2
    Invité
    Invité(e)
    Par défaut
    quelles sont vos types de données ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 221
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    quelles sont vos types de données ?
    Ok j'avais oublier

    DUREE est de type VARCHAR2 (10 Byte) et

    DATE_TRT et DATE_FICHIER sont de type Date.

  4. #4
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Bonjour,

    On peut faire des opération sur le format Date, et en particulier ajouter un nombre décimal en jour (01/01/2012 + 1 = 02/01/2012). L'idée est donc de convertir la durée stockée en hh24:mi:ss en nombre de jours décimal :

    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
    30
    31
    32
    33
    34
    35
     
    With TEST As (
         Select TO_DATE('05/21/2012 10:34:35', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:00:09' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 09:10:21', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:00:04' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 09:10:19', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:00:06' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 11:37:38', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:01:10' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 15:31:49', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:00:09' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 00:34:11', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:30:50' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 00:46:48', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:00:20' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 23:33:31', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:00:07' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 11:25:40', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:09:13' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 11:25:58', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:08:24' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 21:43:16', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:00:19' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 19:30:24', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:01:09' DUREE From DUAL Union All
         Select TO_DATE('05/21/2012 20:41:12', 'mm/dd/yyyy hh24:mi:ss') DEB, '00:01:14' DUREE From DUAL 
    )
    Select DEB + (TO_DATE(DUREE, 'hh24:mi:ss') - TO_DATE('00:00:00', 'hh24:mi:ss')) FIN
      From TEST
     
    ----------------------------
     
    FIN
    21/05/2012 10:34:44
    21/05/2012 09:10:25
    21/05/2012 09:10:25
    21/05/2012 11:38:48
    21/05/2012 15:31:58
    21/05/2012 01:05:01
    21/05/2012 00:47:08
    21/05/2012 23:33:38
    21/05/2012 11:34:53
    21/05/2012 11:34:22
    21/05/2012 21:43:35
    21/05/2012 19:31:33
    21/05/2012 20:42:26

  5. #5
    Expert confirmé 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
    Par défaut
    Durée c'est un interval aussi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DEB + TO_DSINTERVAL('0 '||DUREE) FIN 
      FROM TEST
    /

  6. #6
    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
    dans le cas où durée peut être de 99h99m99s, je préfère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT deb, duree, DEB
      + REGEXP_SUBSTR (duree,'(\d+):(\d+):(\d+)',1,1,'i',1)/ 24 --hour
      + REGEXP_SUBSTR (duree,'(\d+):(\d+):(\d+)',1,1,'i',2)/ 1440  --minute
      + REGEXP_SUBSTR (duree,'(\d+):(\d+):(\d+)',1,1,'i',3)/ 86400  --second 
        FIN
      FROM TEST
    ou une autre variante avec instr et substr pour ceux qui ont des versions antiques

  7. #7
    Expert confirmé 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
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    ..ou une autre variante avec instr et substr pour ceux qui ont des versions antiques
    C’est au moins la 11gR1 sinon le paramètre subexpression n’existe pas encore.

Discussions similaires

  1. format date sous oracle
    Par jifi63 dans le forum Oracle
    Réponses: 5
    Dernier message: 30/11/2010, 19h01
  2. Réponses: 9
    Dernier message: 03/06/2009, 14h36
  3. question sur date sous oracle oriente object
    Par PHPkoala dans le forum SQL
    Réponses: 4
    Dernier message: 22/01/2008, 23h48
  4. probleme de date sous oracle
    Par Melvine dans le forum Oracle
    Réponses: 12
    Dernier message: 26/09/2006, 15h24
  5. Conversion de date Sous Oracle 9i
    Par filton dans le forum Oracle
    Réponses: 1
    Dernier message: 30/06/2006, 11h49

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