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 :

Sélectionner les N premiers mots d'un champ texte


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Par défaut Sélectionner les N premiers mots d'un champ texte
    Bonjour tout le monde !

    Je cherche quelque chose de super simple : Retourner les N premiers mots d'un champ de texte.
    Dans ce cas, le séparateur serait ESPACE.

    Y'a pas une fonction pour ça ?

    Merci pour les réponses !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 67
    Par défaut
    Citation Envoyé par keskispas
    Bonjour tout le monde !

    Je cherche quelque chose de super simple : Retourner les N premiers mots d'un champ de texte.
    Dans ce cas, le séparateur serait ESPACE.

    Y'a pas une fonction pour ça ?

    Merci pour les réponses !
    Tu peux faire par exemple :
    select rpad('ABCDEFGKLM HTYU IO', instr('ABCDEFGKLM HTYU IO', ' ')) from dual

    INSTR() qui te donne la position de ton séparateur
    RPAD() qui te donne les X caractères à droite

    J'espère que cela va t'aider.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with t as (select 'Ma plus belle requete en sql' t, 3 n from dual) 
    select t,n,substr(t,1,instr(t,' ',1,n)) s from t;
    T                                     N S
    ---------------------------- ---------- ----------------------------
    Ma plus belle requete en sql          3 Ma plus belle

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Par défaut
    pour les anciennes bases, il est possible de créer une fonction du style :

    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
    CREATE OR REPLACE function left_substr ( strTemp varchar2,delim varchar2, cpt number ) return varchar2 is
    pos      number(3):=1;
    cptCurr  number(2) := 0;
    oldpos number(3) := 1;
    begin
     while instr (strTemp,delim,oldpos )>0 loop
        pos := instr (strTemp,delim,oldpos) ;
        if pos > 0 then
           cptCurr := cptCurr +1;
           oldpos := pos +1 ;
           if cptCurr = cpt then
    	    oldpos := pos -1;
          	exit ;
           end if;
        else
            oldpos := pos +1;
        end if;
     end loop;
     if pos > 0 then
        return substr(strTemp,0,oldpos);
     else
        return strTemp ;
     end if;
    end;
    /
    1* select left_substr('Salut toto comment vas tu ?',' ',4) result from dual
    SQL> /

    RESULT
    -------------------------------------------------------------------------------
    Salut toto comment vas
    CDLT.

  5. #5
    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
    substr(t,1,instr(t,' ',1,n)) fonctionne sans aucun doute dans Oracle 4, tu veux dire quoi par ancienne base?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Par défaut
    WITH t AS ne fonctionne pas en 8.05 entre autres ,
    le monde n'est pas composé que de 10gR2 ....

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

Discussions similaires

  1. comment afficher les 2 premiers mots d'un champ?
    Par Mydriaze dans le forum Requêtes
    Réponses: 5
    Dernier message: 06/08/2010, 14h19
  2. Réponses: 2
    Dernier message: 05/04/2007, 14h19
  3. [MySQL] Recuperer les deux premiers caracteres d'un champ
    Par Msieurduss dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 15/06/2006, 14h40
  4. afficher les n premiers caractères d'un champs
    Par kabool dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/03/2006, 18h22
  5. Réponses: 2
    Dernier message: 04/09/2004, 10h53

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