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 :

Filtre sur nombre contenu dans un String


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 212
    Par défaut Filtre sur nombre contenu dans un String
    Bonjour à tous, j'ai un petit souci pour une requête :

    J'ai une table STEP (STEP_ID,STEP_NAME)
    Je voudrais garder uniquement les étapes + grandes que 100,
    voici des exemples de valeurs:

    ABC101: texte
    DE102: texte
    F101bis: texte
    GH100: texte
    DJ050: texte
    ZE100bis: texte

    ==> je veux garder:
    ABC101: texte
    DE102: texte
    F101bis: texte


    ==>je veux éliminer:
    GH100: texte
    DJ050: texte
    ZE100bis: texte

    Quelqu'un aurait une idée?

  2. #2
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Sur quel SGBD ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 212
    Par défaut
    Oracle j'ai oublié de préciser

  4. #4
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    La fonction SUBSTR te permettra de récupérer la partie qui t’intéresse ici pour filtrer sur le WHERE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    substr(string, position) 
    substr(string, position, length)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 212
    Par défaut
    Je ne comprends pas trop comment je pourrais me débrouille avec un substring puisque le nombre de caractère avant-après est variable

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Si les largeurs ne sont pas figées :
    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
    With SR as
    (
    select 'ABC101' as col from dual union all
    select 'DE102'         from dual union all
    select 'F101bis'       from dual union all
    select 'GH100'         from dual union all
    select 'DJ050'         from dual union all
    select 'ZE100bis'      from dual union all
    select 'FSDGSFD'       from dual union all
    select '10AVC1bis'     from dual
    )
    select col
         , to_number(regexp_substr(col, '[[:digit:]]+')) as regexp
         , to_number(translate(col, '#' || translate(col, '#0123456789', '#'), '#')) as translate
      from SR;
     
    COL       REGEXP TRANSLATE
    --------- ------ ---------
    ABC101       101       101
    DE102        102       102
    F101bis      101       101
    GH100        100       100
    DJ050         50        50
    ZE100bis     100       100
    FSDGSFD                   
    10AVC1bis     10       101
    Notez bien la différence entre les deux expressions sur le dernier cas.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 212
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_number(regexp_substr(col, '[[:digit:]]+'))
    Nickel c'est exactement ce qu'il me faut !

  8. #8
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Un autre solution peut-être
    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
     
    SQL> select step, txt
      2  from (
      3  with got_my_data as
      4  (select 'ABC101' step,  'texte' txt from dual union all
      5   select 'DE102'        ,   'texte' from dual union all
      6   select 'F101bis'      , 'texte' from dual union all
      7   select 'GH100'        , 'texte' from dual union all
      8   select 'DJ050'        , 'texte' from dual union all
      9   select 'ZE100bis'    , 'texte' from dual
     10   )
     11  select step, txt, regexp_replace(step, '\D*') numbr
     12    from got_my_data
     13  )
     14  where
     15    numbr > 100;
     
    STEP     TXT
    -------- -----
    ABC101   texte
    DE102    texte
    F101bis  texte

  9. #9
    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
    Pour ceux qui sont en 9 et qui n'ont pas regexp

    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
        WITH got_my_data AS
        (SELECT 'ABC101' step,  'texte' txt FROM dual UNION ALL
         SELECT 'DE102'        ,   'texte' FROM dual UNION ALL
         SELECT 'F101bis'      , 'texte' FROM dual UNION ALL
         SELECT 'GH100'        , 'texte' FROM dual UNION ALL
         SELECT 'DJ050'        , 'texte' FROM dual UNION ALL
         SELECT 'ZE100bis'    , 'texte' FROM dual
        )
       SELECT step, txt, TO_NUMBER(TRANSLATE(step, '0'|| TRANSLATE(step, 'a0123456789', 'a'), '0')) num
         FROM got_my_data
         WHERE TO_NUMBER(TRANSLATE(step, '0'|| TRANSLATE(step, 'a0123456789', 'a'), '0')) > 100
     
    STEP	TXT	NUM
    ABC101	texte	101
    DE102	texte	102
    F101bis	texte	101
    Petite précision s'il y a plusieurs nombres dans le texte séparés par de l'alpha, les translate vont concaténer les 2 nombres.
    Je ne sais pas ce que regexp fait dans ce cas

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    La solution avec les translate est aussi dans mon message !
    D'ailleurs c'est sur une de vos réponses que j'ai pris l'habitude de m'en souvenir.

  11. #11
    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
    Oups, j'avais pas vu !
    Sinon, après 4 ans passés ensemble sur ce forum.. on peut se passer du vouvoiement, non ?

Discussions similaires

  1. Réponses: 17
    Dernier message: 02/08/2006, 15h32
  2. [DEBUTANT]Recherche mot contenu dans une String
    Par lynxman dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 11h49
  3. Réponses: 2
    Dernier message: 31/10/2005, 22h04
  4. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23
  5. Comment savoir le signe du nombre contenu dans ax ?
    Par falcon007de dans le forum Assembleur
    Réponses: 3
    Dernier message: 26/03/2004, 11h48

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