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 :

probleme requete sql


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut probleme requete sql
    Bonjour,
    salut les ami
    j'ai un champs qui s'apple (codestagiere) dans la base mysql qui es compose des chiffre "10.456.07" et je veux que le resulta de tma requete sql "select...." affiche seulement 456 .
    comment faire et merci beaucoup.

  2. #2
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    regardez du côté de SubStr et de InStr

  3. #3
    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
    instr et substr est la méthode la plus simple...

    mais bon, il y a des alternatives pour le fun
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select mod(trunc(to_number('10.456.07','99G999G99'
      ,'NLS_NUMERIC_CHARACTERS='',.''')/100),1000) n 
    from dual;
             N
    ----------
           456
     
    select regexp_substr('10.456.07','[^.]*',1,1,null,2) n from dual;
    N
    ---
    456
    edit: je n'ai pas testé la 2e variante car je n'ai pas de 11g sous la main

    edit: ou, plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select substr('10.456.07',4,3) n from dual;
    N
    ---
    456

  4. #4
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    instr et substr est la méthode la plus simple...

    mais bon, il y a des alternatives pour le fun
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select mod(trunc(to_number('10.456.07','99G999G99'
      ,'NLS_NUMERIC_CHARACTERS='',.''')/100),1000) n 
    from dual;
             N
    ----------
           456
     
    select regexp_substr('10.456.07','[^.]*',1,1,null,2) n from dual;
    N
    ---
    456
    edit: je n'ai pas testé la 2e variante car je n'ai pas de 11g sous la main

    edit: ou, plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select substr('10.456.07',4,3) n from dual;
    N
    ---
    456
    Mais où allez-vous chercher ça ???

    Question plus sérieuse : est-ce réellement juste pour le fun d'écrire une requête "farfelue" (*) où est-ce que ces formes d'écritures sont réellement plus intérêssantes
    ?

    (*) je me souviens avoir vu un concours de code C où le but du jeu était de faire un programme relativement simple avec une seule instruction, d'où une écriture totalement illisible...

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Ca a l'air sympa comme concours !

  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
    regexp_substr par exemple est beaucoup plus lent que substr et instr, je ne l'employerais donc pas dans cet exemple. Mais regexp_substr est beaucoup plus puissant, si par exemple le séparateur peut être . ou , et que les règles sont trop complexes pour faire un substr et un instr, alors ça peut être intéressant.

    Quand à to_number et trunc et mod, cela permet de vérifier qu'on a bien des nombres et sinon ça renvoye une erreur (ce qui peut être bien ou mal, à voir)

    La troisième solution de n'employer que SUBSTR sans instr est aussi sans doute intéressante. ça dépend des données.

    Il vaut mieux employer
    SUBSTR(, INSTR(), INSTR() )
    que
    REGEXP_SUBSTR

    mais il vaut mieux employer
    REGEXP_SUBSTR(,,)
    que
    CASE WHEN ... LIKE ... THEN SUBSTR(,INSTR(),INSTR()) WHEN ... LIKE ... THEN SUBSTR() || SUBSTR() ELSE SUBSTR () END...

    bon, ça dépend tout de la qualité des données.

  7. #7
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    ça devait être ça je pense...
    http://www0.us.ioccc.org/main.html

  8. #8
    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
    tu parles du concours que Korn (l'auteur du Korn Shell) avait gagné en 1987 avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
    http://www.ioccc.org


  9. #9
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut re
    salut les amis pour votre reponse

    il ya une autre methode qui j'ai vu dans le web qui consiste a supprimer les 2 chiffre qui ont apres et avant le point car le nombre qui est aumilieu peut etre long par fois "10.456.07" ou "10.1023.07"

    et le resultet doit donner
    R
    -----
    456
    1023

    et merci a tous

  10. #10
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Si ce ne sont que des chiffres, oui.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT LTRIM(RTRIM(RTRIM(LTRIM('123.4567.54810', '0123456789'), '0123456789'), '.'), '.')
    FROM dual

  11. #11
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut re
    merci mcm

    est ce que ne peut pas utiliser cette methode avec "instr"

    thx

  12. #12
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WITH t AS (SELECT '123.4567777.789' AS a FROM dual)
    SELECT a, SUBSTR(a, INSTR(a, '.') +1, INSTR(a, '.', 1,2) - INSTR(a, '.')-1)
    FROM t

  13. #13
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Citation Envoyé par hassan0379 Voir le message
    merci mcm

    est ce que ne peut pas utiliser cette methode avec "instr"

    thx
    qu'est-ce qui vous empêche d'essayer ?

Discussions similaires

  1. [MySQL] Probleme requete sql et code html
    Par needles94000 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/03/2006, 17h38
  2. [Access] Probleme requete SQL
    Par kissmytoe dans le forum Langage SQL
    Réponses: 11
    Dernier message: 24/02/2006, 15h25
  3. probleme requete SQL
    Par grochenel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/12/2005, 09h26
  4. [MySQL] probleme requete sql et php
    Par digger dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/10/2005, 14h15
  5. probleme requete sql
    Par Shosho dans le forum Langage SQL
    Réponses: 12
    Dernier message: 03/05/2005, 09h25

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