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

Requêtes MySQL Discussion :

numtodsinterval in MySql


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Points : 79
    Points
    79
    Par défaut numtodsinterval in MySql
    Bonjour,

    J'ai la condition suivante dans ma requête Oracle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where (to_date('01/01/2000', 'DD/MM/YYYY') + numtodsinterval( Date_Fin, 'SECOND') ) > sysdate

    Je souhaite traduire cette condition pour l'exécuter dans MySQL mais je ne sais pas comment traduire la fonction numtodsinterval :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where (str_to_date('01/01/2000', 'DD/MM/YYYY') + numtodsinterval( Date_Fin, 'SECOND') ) > sysdate()

    Merci d'avance

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Si j'ai bien compris votre besoin et ce que fait la fonction Oracle, la fonction DATE_ADD devrait vous satisfaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (DATE_ADD(STR_TO_DATE('01/01/2000', 'DD/MM/YYYY'), INTERVAL Date_Fin SECOND) ) > CURRENT_DATE
    Cependant, de quel type est la colonne date_fin ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Points : 79
    Points
    79
    Par défaut
    Merci bcp pour votre réponse.

    - dans la base Oracle le type de Date_Fin est Varchar2 (20)
    - dans la base Oracle le type de Date_Fin est datetime.


    les données de la base Oracle ont étaient renseignées à partir des données le la base MysSql.

    quand j'exécute la requête sur oracle, ca me donne des lignes en résultat. par contre ca marche pas sur MySQL (même avec les modifications que vous m'avez proposé). je me demande s'il n y pas autres chose à ajouter dans la condition where en MySQL?

    Merci d'avance

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Pouvez vous exprimer en français la condition exprimée dans le WHERE ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Points : 79
    Points
    79
    Par défaut
    je suis développeur qui mis la main sur un projet existant. a ce que j'ai compris, il compte le nombre de secondes depuis 2000 et ca doit être supérieur à sysdate

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 384
    Points : 19 087
    Points
    19 087
    Par défaut
    Salut à tous.

    Citation Envoyé par Laure07
    mais je ne sais pas comment traduire la fonction numtodsinterval :
    La fonction Oracle "numtodsinterval" va être traduite sous MySql par "interval" comme l'a indiqué CinePhil.
    Sauf que dans votre exemple, ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where (to_date('01/01/2000', 'DD/MM/YYYY') + numtodsinterval( Date_Fin, 'SECOND') ) > sysdate
    il n'est pas nécessaire d'utiliser la fonction "str_to_date" pour convertir une date dans le bon type.
    Il suffit juste de l'écrire dans le format qui sera compréhensible par MySql.

    Ce qui donne :
    [code]WHERE ('2000-01-01' + interval Date_Fin second) > current_date
    Soit par exemple :
    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
    --------------
    set @duree = 632448020
    --------------
     
    --------------
    select '2000-01-01' + interval @duree second as 'New_Date'
    --------------
     
    +---------------------+
    | New_Date            |
    +---------------------+
    | 2020-01-16 00:00:20 |
    +---------------------+
    --------------
    select  'oui' as Resultat
      from  dual
     where ('2000-01-01' + interval @duree second) > current_date
    --------------
     
    +----------+
    | Resultat |
    +----------+
    | oui      |
    +----------+
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Points : 79
    Points
    79
    Par défaut
    Merci bcp pour votre réponse.

    je viens d'essayer avec le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where ('2000-01-01' + interval Date_Fin second) > current_date
    mais ca n'a affiche toujours aucune ligne alors que dans oracle y a des enregistrements.

  8. #8
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 384
    Points : 19 087
    Points
    19 087
    Par défaut
    Salut Laure07.

    Je ne comprends pas trop ce que vous essayez de faire avec votre test. C'est pas clair du tout !

    Citation Envoyé par Laure07
    - dans la base Oracle le type de Date_Fin est Varchar2 (20)
    - dans la base Oracle le type de Date_Fin est datetime.
    Dans la base oracle, vous avez deux fois la même colonne avec deux formats différents ???

    Je fais essayer de traduire ce que vous essayez de faire.
    Vous avez une date pivot qui est "2000-01-01" et vous avez une durée qui s'exprime sous la forme année, mois, jours, heure, minutes et secondes.
    Normalement, une durée s'exprime sous la forme d'une quantité de secondes, comme dans mon exemple, pas sous la forme d'une date. Cela porte à confusion !

    Je ne sais pas qui a pondu cela sous Oracle, mais c'est une grosse connerie ! Pourquoi ?
    Car vous avez besoin à chaque fois de la date pivot et de la durée en secondes.
    Il aurait été plus judicieux de convertir la date pivot + durée directement sous la forme d'une date exploitable.
    Par exemple, un contrat qui commence le '2008-06-15' sur une période de 15 ans. Cela se traduit sous MySql par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --------------
    select '2008-06-15' + interval 15 year
    --------------
     
    +---------------------------------+
    | '2008-06-15' + interval 15 year |
    +---------------------------------+
    | 2023-06-15                      |
    +---------------------------------+
     
    Appuyez sur une touche pour continuer...
    Donc pour résoudre votre problème, vous devez convertir "date_fin" sous la forme d'une quantité de secondes. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --------------
    select to_seconds('0000-01-01 00:00:00')
    --------------
     
    +-----------------------------------+
    | to_seconds('0000-01-01 00:00:00') |
    +-----------------------------------+
    |                             86400 |
    +-----------------------------------+
     
    Appuyez sur une touche pour continuer...
    C'est le nombre de secondes depuis l'année zéro.
    Comme il s'agit ici d'un jour (le 1er janvier), la durée correspond donc à 60 * 60 * 24. Soit 86.400 secondes.

    N'oubliez pas que mes exemples sont pour MySql et non pas pour Oracle.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par laure07 Voir le message
    je suis développeur qui mis la main sur un projet existant. a ce que j'ai compris, il compte le nombre de secondes depuis 2000 et ca doit être supérieur à sysdate
    Est-ce que le besoin serait tout simplement de restreindre le résultat aux lignes où date_fin > aujourd'hui ?
    Vu que date_fin semble bien être une date et non pas une durée, j'ai toujours du mal à comprendre le besoin.
    Qu'exprime date_fin ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [Kylix] Kylix attaque Mysql ?
    Par nahmsath dans le forum EDI
    Réponses: 9
    Dernier message: 12/08/2002, 19h37
  2. [Kylix] [cgi] pb déploiement appli avec connexion MySQL [rés
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 06/08/2002, 20h09
  3. Probleme C++Builder et Mysql
    Par noname dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 13h40
  4. connection a une BDD MySql
    Par delire8 dans le forum MFC
    Réponses: 7
    Dernier message: 19/06/2002, 18h18
  5. [Kylix] Pb connection à Mysql
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 25/04/2002, 15h26

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