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 :

Nombre d'occurences sous oracle


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Août 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1
    Par défaut Nombre d'occurences sous oracle
    Bonjour,
    j'ai besoin d'une fonction qui retourne le nombre d'occurrence d'une sous chaine dans une autre chaine de caractères

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Avril 2007
    Messages : 135
    Par défaut
    Voici une fonction pour spliter une chaîne de caractère

    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
    create or replace type split_tbl as table of varchar2(32767);
    /
    show errors;
     
    create or replace function split
    (
        p_list varchar2,
        p_del varchar2 := ','
    ) return split_tbl pipelined
    is
        l_idx    pls_integer;
        l_list    varchar2(32767) := p_list;
    AA
        l_value    varchar2(32767);
    begin
        loop
            l_idx := instr(l_list,p_del);
            if l_idx > 0 then
                pipe row(substr(l_list,1,l_idx-1));
                l_list := substr(l_list,l_idx+length(p_del));
     
            else
                pipe row(l_list);
                exit;
            end if;
        end loop;
        return;
    end split;
    /
    show errors;
    Le résultat est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select * from table(split('one,two,three'));
     
    one
    two
    three
    Adapte cette fonction pour que le return renvoie le nombre d'occurences...

  3. #3
    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
    Je ne pense pas que c'est ce qu'il veuille.
    Le nb d'occurence dans une chaine : On le fait par différence de longueur de chaine en supprimant la sous-chaine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (LENGTH('abcdefabcdabcdef') - NVL(LENGTH(REPLACE('abcdefabcdabcdef', 'abc')),0))
    				/ LENGTH('abc') AS nb_occurences
    FROM dual

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Avril 2007
    Messages : 135
    Par défaut
    C'est plus simple effectivement
    Et comme tu le dis ci-bien
    Citation Envoyé par McM Voir le message
    More Code : More Bugs. Less Code : Less Bugs

  5. #5
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 22
    Par défaut
    Citation Envoyé par McM Voir le message
    Je ne pense pas que c'est ce qu'il veuille.
    Le nb d'occurence dans une chaine : On le fait par différence de longueur de chaine en supprimant la sous-chaine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (LENGTH('abcdefabcdabcdef') - NVL(LENGTH(REPLACE('abcdefabcdabcdef', 'abc')),0))
    				/ LENGTH('abc') AS nb_occurences
    FROM dual
    Merci beaucoup c exactement ce que je cherche

  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
    Citation Envoyé par aminoby Voir le message
    Bonjour,
    j'ai besoin d'une fonction qui retourne le nombre d'occurrence d'une sous chaine dans une autre chaine de caractères
    REGEXP_COUNT


    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select regexp_count('MISSISSIPI','SI') from dual;
    REGEXP_COUNT
    ------------
                2

  7. #7
    Membre confirmé Avatar de ouistitis
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 95
    Par défaut
    Bonjour et merci pour cette fonction !

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ( length ('MISSISSIPI') - 
             nvl (length (replace ('MISSISSIPI', 'SI')), 0) 
           ) / length ('SI') 
           AS nb_occurrences  
    FROM dual;

    Elle fonctionne nickel.

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

Discussions similaires

  1. Nombre max de table sous Oracle
    Par chris0938 dans le forum Oracle
    Réponses: 4
    Dernier message: 18/05/2010, 13h08
  2. Réponses: 6
    Dernier message: 18/11/2008, 21h34
  3. Nombre d'occurence d'un mot sous Word
    Par midiweb dans le forum Word
    Réponses: 3
    Dernier message: 07/05/2008, 19h04
  4. Réponses: 2
    Dernier message: 03/07/2007, 23h37
  5. Réponses: 28
    Dernier message: 22/09/2005, 11h57

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