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

Développement SQL Server Discussion :

Retrouver la xéme occurence d'un caractére


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Points : 61
    Points
    61
    Par défaut Retrouver la xéme occurence d'un caractére
    Bonjour,

    Je cherche à parser un champ qui contient des données séparées par :. Pour cela je voulais chercher la 1er, 2éme ... position du caractère : et faire ensuite un substring. Seulement voilà je pensais m'en sortir avec CHARINDEX mais non raté

    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
     
    declare @T table
    (
      expression varchar(50)
    )
     
    insert into @T values
    ('nbresets:0,totalsec:0,lossevtec:0'),
    ('nbresets:0,totalsec:7844,lossevtec:0')
     
    SELECT 
    	CHARINDEX(':', expression)    AS 'Position'
    	,CHARINDEX(':', expression, 2) AS 'Position' 
    	,CHARINDEX(':', expression, 3) AS 'Position' 
    FROM
    	@T
     
    Position	Position	Position
    9	          9	          9
    9	          9	          9
    Est ce que vous auriez une idée ?

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Est-que la structure est toujours la même ?

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    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
    declare @T TABLE
    (
      expression varchar(50)
    )
     
    INSERT INTO @T VALUES
    ('nbresets:0,totalsec:0,lossevtec:0'),
    ('nbresets:0,totalsec:7844,lossevtec:0')
     
    SELECT 
    	CHARINDEX(':', expression)    AS 'Position'
    	,CHARINDEX(':', expression, CHARINDEX(':', expression) + 1) AS 'Position' 
    	,CHARINDEX(':', expression, CHARINDEX(':', expression, CHARINDEX(':', expression) + 1) + 1) AS 'Position' 
    FROM
    	@T
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Points : 61
    Points
    61
    Par défaut
    ça fonctionne et c'est bien ce que je veux.

    Par contre là je n'ai mis que 3 champs mais en réél j'en ai 10 du coup la formule du dernier il va y avoir un paquet de CHARINDEX imbriqué

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    C'est pour ça que je demandais si la structure était toujours la même !

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Points : 61
    Points
    61
    Par défaut
    Non elle peut avoir 3 champs comme 10.

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    mais est-ce que les noms de champ sont toujours les mêmes (ie prédéfinis) ?

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Points : 61
    Points
    61
    Par défaut
    oui j'ai 10 noms de champs pré-définis mais ils peuvent ne pas tous être présents dans les données à parser

    je peux avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    champ1:valeur1,champ2:valeur2,champ3:valeur3
    mais aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    champ1:valeur1,champ3:valeur3

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    ALors si les nom de champs sont connus, servez-vous en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     SELECT 
    	CHARINDEX('nbresets:', expression) + LEN('nbresets:') AS position_nbreset
    	,CHARINDEX('totalsec:', expression) + LEN('totalsec:') AS position_totalsec
    	,CHARINDEX('lossevtec:', expression) + LEN('lossevtec:') AS position_lossevtec
    FROM @T

  10. #10
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Points : 61
    Points
    61
    Par défaut
    Effectivement plutôt que chercher le séparateur je peux directement chercher le séparateur + le nom du champ

    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/01/2008, 13h56
  2. Réponses: 6
    Dernier message: 14/08/2007, 16h44
  3. Occurences d'un caractère dans une chaîne
    Par meadup dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/01/2007, 18h49
  4. occurence d'un caractére ds un tableau
    Par ender08450 dans le forum C
    Réponses: 4
    Dernier message: 28/12/2006, 11h57
  5. Retrouver toutes les occurences dans un memo
    Par johweb dans le forum Delphi
    Réponses: 2
    Dernier message: 09/06/2006, 14h44

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