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 :

Utiliser le Modulus


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Points : 99
    Points
    99
    Par défaut Utiliser le Modulus
    Bonjour,

    voici mon expression , elle fonctionne mais j''ai voulu y ajouter une condition sur l' APPAREILS.ID , c'est le modulo. J'ai besoin de récupérer tous les champs où APPAREILS.ID modulo 86400000 = 0. Je n'obtiens pas d'erreur , mais pas de résultats non plus.
    Est ce que ca vous parait correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select DISQUES.utiliser,appareils.id FROM APPAREILS,DISQUES WHERE
     APPAREILS.ID = DISQUES.ID and APPAREILS.ID > 1150934400000 and mod
    (APPAREILS.ID,86400000)=0 AND APPAREILS.NOM = 'SGSFSTK' and
     disques.description = 'C:' order by appareils.ID desc

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Pourtant, cette instruction n'a pas de bug connu...

    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
    SQL> select code from messages where mod(code,2) = 0 
      2  /
     
          CODE
    ----------
             2
            10
            20
            30
            32
            60
            62
            64
            66
            68
            70
    J'affiche bien, ici, uniquement les codes ayant une valeur paire.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Points : 99
    Points
    99
    Par défaut
    oui mon code n'a pas d'erreur alors je pense.

    Ma base à enregistrer pour l'instant des temps en millisecondes (temps depuis me 1er janvier 1970).
    Plusieurs de ces dates correspondent à une même journée.
    Ces dates ne sont pas séparées par un écart précis, et on peut se retrouver avec 4 valeurs matinales et 2 valeurs d'après midi ou vice versa.

    Je cherche la meilleur solution pour garder uniquement pour chaque jour la valeur la plus proche de midi et la plus proche de minuit.

    Une journée est égale à 86400000 millisecondes.

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... mod (APPAREILS.ID,86400000)=0 ...
    Nous sommes bien d'accord sur le fait que vous ne sélectionnez que les enregistrements dont le reste de la division de ID par 86400000 égale 0
    ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Points : 99
    Points
    99
    Par défaut
    C'est exact , et c'est d'ailleur cette commande qu'il faut changer pour parvenir aux résultats que j'attends

  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
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par arsenik7
    la plus proche de minuit
    le plus proche de minuit? ça veut dire quoi, tu tries par date et tu prends la première après 0:00 ? dans ce cas le il faut faire un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    select * from 
      (select t.*, 
        row_number() over (partition by trunc(d/86400000) order by d) r 
      from t) 
    where r=1;

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Points : 99
    Points
    99
    Par défaut
    Exact ! Je vais tester tout ca Merci

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Points : 99
    Points
    99
    Par défaut
    laurent j'ai pas suivit , j'arrive pas à la comprendre.

    Voici une première commande qui me permet de récupérer les dates avec l'espace restant sur le disque depuis 7 jours.

    select DISQUES.utiliser,appareils.id FROM APPAREILS,DISQUES WHERE APPAREILS.ID = DISQUES.ID and APPAREILS.ID > "+tps+" AND APPAREILS.NOM = '"+element+"' and disques.description = '"+disque+"' order by appareils.ID desc

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Points : 99
    Points
    99
    Par défaut
    Ensuite ce qui sera fort c'est une instruction à laquelle je passe une dateA, et elle me renvoi la date avec l'espace disque la plus proche de la dateA dans l'ensemble des dates récupérer plus haut.

  10. #10
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par SheikYerbouti
    Pourtant, cette instruction n'a pas de bug connu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select mod(-13, 5) from dual;
    MOD(-13,5)
    -3
    Pour un mathématicien, c'est un bug, la bonne réponse est 2
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  11. #11
    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
    Le mathématicien n'a qu'à employer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL> select remainder(-13,5) from dual;
    REMAINDER(-13,5)
    ----------------
                   2

  12. #12
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par laurentschneider
    Le mathématicien n'a qu'à employer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL> select remainder(-13,5) from dual;
    REMAINDER(-13,5)
    ----------------
                   2
    Remainder ne fonctionne pas en 9.2; de plus si il y avait bug dans l'addition et que je te dise tu n'as qu'à employer ® à la place de +, tu trouverais sans doute cela un peu limite, et bien c'est pareil, modulo est une fonction mathématique plus ancienne que SQL et ORACLE, et elle a un sens bien précis (je me suis fait avoir la première fois, depuis je m'en sors).

    Pour ceux qui n'ont pas la fonction remainder, j'utilise
    pour être sur d'avoir la bonne réponse
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  13. #13
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par Médiat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select mod(-13, 5) from dual;
    MOD(-13,5)
    -3
    Pour un mathématicien, c'est un bug, la bonne réponse est 2
    extrait de la doc:

    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
    This function behaves differently from the classical mathematical modulus function when m is negative. The classical modulus can be expressed using the MOD function with this formula:
     
    m - n * FLOOR(m/n)
     
     
    The following table illustrates the difference between the MOD function and the classical modulus:
     
    m    n    MOD(m,n) Classical Modulus 
    11   4      3       3
     
    11  -4      3      -1
     
    -11  4     -3       1
     
    -11 -4     -3      -3
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  14. #14
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par SheikYerbouti
    extrait de la doc:
    Cela s'appelle transformer un bug en feature .

    La fonction modulo existait avant ORACLE, c'est dommage de donner le même nom à une fonction qui ne fait pas la même chose, mais suffisamment proche pour créer des idées fausses chez les utilisateurs.

    Je reconnais, bien sur, que dans ce genre de circonstances, réparer un bug peut créer plus de problème que cela n'en résout, à cause de la base installée. Imagine une fonction baptisée logarithme népérien et telle que ln(1) = 2.71828...., même si dans la doc on l'explique, je continuerais de penser que c'est une erreur.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  15. #15
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Ce qui est interressant dans ce passage, c'est qu'il donne la solution au problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> SELECT (-13) - (5) * FLOOR((-13)/(5)) FROM dual
      2  /
     
    (-13)-(5)*FLOOR((-13)/(5))
    --------------------------
                             2
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  16. #16
    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
    Comme dirait le villageois qui part en vacances :
    c'est pas un bug, c'est feature

    Allez, bonnes bourres et @+
    Laurent

  17. #17
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Prend du bon temps
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  18. #18
    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
    merci

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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