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 :

Problème avec CHARINDEX et SUBSTRING


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 206
    Points
    206
    Par défaut Problème avec CHARINDEX et SUBSTRING
    Bonjour à tous,

    Je vous explique mon soucis et son contexte.
    J'ai actuellement une table de données à remplir ( table1 ) et une table qui contient les informations ( table2 ), le tout sous SQL Server 2008 R2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Table1 -> ID - GroupeType - MemberUser
    Table2 -> ID - Message
    GroupeType et MemberUser sont des informations contenues dans le champs Message de ma table2.
    Les données dans ma table2 ne sont pas du tout formatées de manière à être coupées simplement. Je me dois de jongler avec la position de certaines suite de caractères.

    J'ai dans mon champs message des données formatées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Blablablablablablabla Nom du compte : CN=Charles Duponts,CN=... etc ...
    J'effectue une requête de traitement que voici, pour placer dans ma table1 les informations scindées de ma table2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE Table1
    SET MemberUser = SUBSTRING(Message,CHARINDEX('Nom du compte : CN=',Message)+19,CHARINDEX(',CN=',Message)-CHARINDEX('Nom du compte : CN=',Message)-19) 
    FROM Table2 
    WHERE Table1.ID=Table2.ID
    En gros, je recherche la position de "Nom du compte : CN=", je prends les données qui sont après, et je m'arrête au début de ",CN=". Je jongle, mais ça fonctionne !

    Cependant, j'ai un gros problème. Certains enregistrements ne possèdent pas les données "Nom du compte : CN=". Et pour ces enregistrements, impossible de passer la requête en succès. J'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Paramètre de longueur non valide passé à la fonction LEFT ou SUBSTRING.
    L'instruction a été arrêtée.
    Ce qui est plutôt logique. CHARINDEX me renvoie 0 car la fonction ne trouve pas la chaine demandé, et SUBSTRING ne s'effectue donc pas.
    J'ai tenté de rajouter une clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE CHARINDEX(Message,"Nom du compte : CN=")!=0
    Mais j'obtiens toujours une erreur.

    En gros, je souhaite modifier ma requête pour qu'elle effectue le traitement sur les enregistrements qui contiennent "Nom du compte : CN=" et ignorer complètement les autres.

    Des idées et/ou suggestions ?
    La politesse n'a jamais tué personne
    Le langage SMS c'est le mal !
    Pensez au tag

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Des idées et/ou suggestions ?

    Faites un case WHEN dans votre requête pour gérer les lignes qui sont à traiter ou pas en fonction de la présence de 'CN='...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  3. #3
    Membre habitué
    Homme Profil pro
    BI Expert
    Inscrit en
    Décembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : BI Expert

    Informations forums :
    Inscription : Décembre 2005
    Messages : 181
    Points : 139
    Points
    139
    Par défaut
    mets une clause de type
    WHERE contains(Message,"Nom du compte : CN=")

    comme ca tu n’exécutera ton update que sur le contenu concerné.

Discussions similaires

  1. problème avec substr
    Par bills dans le forum SL & STL
    Réponses: 4
    Dernier message: 01/02/2008, 09h49
  2. [XSLT]problème avec substring et when
    Par fabnet dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 29/10/2007, 07h28
  3. problème avec substring
    Par trotters213 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/10/2006, 15h39
  4. problème avec substring
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/10/2005, 13h47
  5. Problème avec un substring
    Par yoda_style dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 11h29

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