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

MS SQL Server Discussion :

Extraction des mots d'une chaine de caractere


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Extraction des mots d'une chaine de caractere
    Bonjour,

    Une petite question d'un novice...
    Comment extraire tous les mots d'une chaine de caractere, je m'explique :

    Table 1
    Champ 1
    Il Fait beau

    nous donnerait
    Table 1
    Champ1 Champ 2
    Il Fait beau Il
    Il Fait beau Fait
    Il Fait beau beau


    Merci pour votre aide

    Ahd

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Si vous êtes sous SQL Server 2005, vous pouvez écrire :

    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
    ;WITH
    	CTE (Deb, Fin) AS 
    	( 
    			SELECT 1 Deb, CHARINDEX(' ', T.Colonne1 + ' ') Fin
    			FROM TABLE1 AS T
    		UNION ALL 
    			SELECT Fin + 1, CHARINDEX(' ', T.Colonne1 + ' ', Fin + 1) 
    			FROM CTE
    			CROSS JOIN dbo.TABLE1 AS T
    			WHERE CHARINDEX( ' ', T.Colonne1 + ' ', Fin + 1 ) > 0 
    	)
    SELECT T.Colonne1,
    		SUBSTRING(T.Colonne1, CTE.Deb , CTE.Fin - CTE.Deb) AS Mots
    FROM CTE 
    CROSS JOIN dbo.TABLE1 AS T
    @++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Merci elsuket pour la rapidité de ta réponse mais le pb est plus complexe, comme ma question ne l'indique pas... à savoir que le nombre de mots dans la phrase est variable...
    En fait chaque phrase (quelques milliers) est porteuse d'un résultat numerique, nous souhaiterions analyser quels sont les mots les plus "efficaces"
    Merci

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    J'ai oublié de poster le fichier de resultats de votre requete

    merci
    Fichiers attachés Fichiers attachés

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Désolé du retard que ma réponse a pu prendre.
    Essayez ceci :

    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
    31
    32
    33
    CREATE TABLE TbPhrase
    (
    	IDPhrase INT IDENTITY CONSTRAINT PK_TbPhrase PRIMARY KEY,
    	Phrase VARCHAR(128)
    )
    GO
     
    INSERT INTO dbo.TbPhrase VALUES ('C''est le printemps chic chic')
    INSERT INTO dbo.TbPhrase VALUES ('Il fait beau demain')
    GO
     
    ;WITH
    	CTE (IDPhrase, Deb, Fin, Indice) AS 
    	( 
    			SELECT T.IDPhrase,
    					1 Deb,
    					CHARINDEX(CHAR(32), T.Phrase + CHAR(32)) Fin,
    					1 AS Indice
    			FROM dbo.TbPhrase AS T
    		UNION ALL 
    			SELECT T.IDPhrase,
    					CTE.Fin + 1,
    					CHARINDEX(CHAR(32), T.Phrase + CHAR(32), CTE.Fin + 1),
    					CTE.Indice + 1
    			FROM CTE
    			JOIN dbo.TbPhrase AS T ON T.IDPhrase = CTE.IDPhrase
    			WHERE CHARINDEX(CHAR(32), T.Phrase + CHAR(32), CTE.Fin + 1) > 0
    	)
    SELECT T.Phrase,
    		SUBSTRING(T.Phrase, CTE.Deb , CTE.Fin - CTE.Deb) AS Mots
    FROM CTE 
    JOIN dbo.TbPhrase AS T ON T.IDPhrase = CTE.IDPhrase
    ORDER BY CTE.IDPhrase
    Il vous faut absolument une clé primaire dans votre table de phrases

    @++

Discussions similaires

  1. Remplacer des mots dans une chaine de caracteres
    Par johnson95 dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2011, 09h19
  2. Identification Mot dans une chaine de caracteres
    Par ALEXM dans le forum Access
    Réponses: 2
    Dernier message: 23/05/2007, 11h30
  3. Réponses: 5
    Dernier message: 21/01/2007, 00h43
  4. Recherche un mot dans une chaine de caractere
    Par jean tof dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2006, 11h34
  5. Réponses: 3
    Dernier message: 31/01/2005, 23h18

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