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 :

Découpage de chaînes


Sujet :

MS SQL Server

  1. #1
    Membre régulier Avatar de innova
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 185
    Points : 109
    Points
    109
    Par défaut Découpage de chaînes
    Bonjour,

    J'ai la chaîne suivante par exemple :

    Key "hkey_classes_root \mime\database\content type\application/x-cnet-vsl" value "extension" data ".vsl"

    J'aimerais extraire les valeurs contenues dans value et data.

    En clair, avoir : extension et .vsl afin de les stocker dans deux champs d'une table.

    Comment faire ?

    J'ai découvert la fonction charindex et subtring mais je ne n'arrive pas à tout combiner ;-(((

    tiens, comment faire si par ex ces valeurs ne sont pas afin que cela ne plante

    Je débute en sql et en sql server.

    Pourriez-vous me montrer un exemple ?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    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
     
    declare @str varchar(500)
     
    set @str='Key "hkey_classes_root \mime\database\content type\application/x-cnet-vsl" value "extension" data ".vsl"'
     
    select 
    case charindex('value',@str)
      when 0 then 'Aucune valeur'
      else substring(@str,charindex('value',@str)+len('value')+1,charindex('data',@str,charindex('value',@str))-charindex('value',@str)-len('value')-1)
    end
    ,case charindex('data',@str,charindex('value',@str))
      when 0 then 'Aucune valeur'
      else  substring(@str,charindex('data',@str,charindex('value',@str))+len('data')+1,500)
    end
    Errare humanum est, perseverare diabolicum (Sénèque)

  3. #3
    Membre régulier Avatar de innova
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 185
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par serge0934
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    declare @str varchar(500)
     
    set @str='Key "hkey_classes_root \mime\database\content type\application/x-cnet-vsl" value "extension" data ".vsl"'
     
    select 
    case charindex('value',@str)
      when 0 then 'Aucune valeur'
      else substring(@str,charindex('value',@str)+len('value')+1,charindex('data',@str,charindex('value',@str))-charindex('value',@str)-len('value')-1)
    end
    ,case charindex('data',@str,charindex('value',@str))
      when 0 then 'Aucune valeur'
      else  substring(@str,charindex('data',@str,charindex('value',@str))+len('data')+1,500)
    end

    rebonjour,

    Tout d'abord encore merci.

    J'essaye d'obtenir uniquement les valeurs sans les guillemets.

    J'ai presque réussi mais il reste le dernier :

    extension .vsl"

    Comment faire pour l'éliminer ?

    Enfin, je dois partir d'un champ d'une table qui contient la chaine en question.

    Comment remplacer dans le code la chaîne par le nom d'un champ d'une table ?

    Merci
    ++

  4. #4
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    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
     
     
    SELECT 
    case charindex('value',nomduchamp)
      when 0 then 'Aucune valeur'
      else substring(nomduchamp,charindex('value',nomduchamp)+len('value')+1,charindex('data',nomduchamp,charindex('value',nomduchamp))-charindex('value',nomduchamp)-len('value')-1)
    end
    ,case charindex('data',nomduchamp,charindex('value',nomduchamp))
      when 0 then 'Aucune valeur'
      else  substring(substring(nomduchamp,charindex('data',nomduchamp,charindex('value',nomduchamp))+len('data')+1,500),1,charindex('"',substring(nomduchamp,charindex('data',nomduchamp,charindex('value',nomduchamp))+len('data')+1,500)))
    end
    from tatable
    where ...
    Errare humanum est, perseverare diabolicum (Sénèque)

  5. #5
    Membre régulier Avatar de innova
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 185
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par serge0934
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    SELECT 
    case charindex('value',nomduchamp)
      when 0 then 'Aucune valeur'
      else substring(nomduchamp,charindex('value',nomduchamp)+len('value')+1,charindex('data',nomduchamp,charindex('value',nomduchamp))-charindex('value',nomduchamp)-len('value')-1)
    end
    ,case charindex('data',nomduchamp,charindex('value',nomduchamp))
      when 0 then 'Aucune valeur'
      else  substring(substring(nomduchamp,charindex('data',nomduchamp,charindex('value',nomduchamp))+len('data')+1,500),1,charindex('"',substring(nomduchamp,charindex('data',nomduchamp,charindex('value',nomduchamp))+len('data')+1,500)))
    end
    from tatable
    where ...

    re,

    J'ai le message d'erreur suivant :

    (32 row(s) affected)

    Server: Msg 536, Level 16, State 3, Line 32
    Invalid length parameter passed to the substring function.

    Pour enlever les guillements comment fait-on ?

    Enfin, comment tu sauvegardes les deux valeurs dans deux variables différentes ?

    Merci pour tout.
    J'espère pouvoir t'aider quand j'aurais un peu d'expérience.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    le mieux est de passer par des functions:
    (le code suivant est testé sans erreur)
    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
    34
    35
    36
    37
    38
     
    create function findData(@str varchar(500))
    returns varchar(50)
    as
    begin
    declare @out varchar(50)
     
    if charindex('value',@str)=0
      set @out= 'Aucune valeur'
    else 
      set @out=substring(@str,charindex('value',@str)+len('value')+2,charindex('data',@str,charindex('value',@str))-charindex('value',@str)-len('value')-4)
    return @out
    end
     
    go
    create function findvalue(@str varchar(500))
    returns varchar(50)
    as
    begin
    declare @out varchar(50)
     
    if charindex('data',@str,charindex('value',@str))=0
      set @out= 'Aucune valeur'
    else 
      set @out=substring(substring(@str,1,len(@str)-1),charindex('data',substring(@str,1,len(@str)-1),charindex('value',substring(@str,1,len(@str)-1)))+len('data')+2,500)
    return @out
    end
    go
     
    declare @value varchar(50),@data varchar(50),@str varchar(500)
     
     
    SET @str='Key "hkey_classes_root \mime\database\content type\application/x-cnet-vsl" value "extension" data ".vsl"'
     
    SELECT @value=dbo.findvalue(@str),@data=dbo.finddata(@str)
     
    print @value
    print @data
    donc pour toi, tu remplaces par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select  @value=dbo.findvalue(nomchamp),@data=dbo.finddata(nomchamp)
    from tatable
    ATTENTION: pour que l'affectation fonctionne il faut que ton select ne renvoie qu'une SEULE ligne => autrement CURSEUR

    A+
    serge
    Errare humanum est, perseverare diabolicum (Sénèque)

  7. #7
    Membre régulier Avatar de innova
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 185
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par serge0934
    le mieux est de passer par des functions:
    (le code suivant est testé sans erreur)
    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
    34
    35
    36
    37
    38
     
    create function findData(@str varchar(500))
    returns varchar(50)
    as
    begin
    declare @out varchar(50)
     
    if charindex('value',@str)=0
      set @out= 'Aucune valeur'
    else 
      set @out=substring(@str,charindex('value',@str)+len('value')+2,charindex('data',@str,charindex('value',@str))-charindex('value',@str)-len('value')-4)
    return @out
    end
     
    go
    create function findvalue(@str varchar(500))
    returns varchar(50)
    as
    begin
    declare @out varchar(50)
     
    if charindex('data',@str,charindex('value',@str))=0
      set @out= 'Aucune valeur'
    else 
      set @out=substring(substring(@str,1,len(@str)-1),charindex('data',substring(@str,1,len(@str)-1),charindex('value',substring(@str,1,len(@str)-1)))+len('data')+2,500)
    return @out
    end
    go
     
    declare @value varchar(50),@data varchar(50),@str varchar(500)
     
     
    SET @str='Key "hkey_classes_root \mime\database\content type\application/x-cnet-vsl" value "extension" data ".vsl"'
     
    SELECT @value=dbo.findvalue(@str),@data=dbo.finddata(@str)
     
    print @value
    print @data
    donc pour toi, tu remplaces par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select  @value=dbo.findvalue(nomchamp),@data=dbo.finddata(nomchamp)
    from tatable
    ATTENTION: pour que l'affectation fonctionne il faut que ton select ne renvoie qu'une SEULE ligne => autrement CURSEUR

    A+
    serge
    Bonjour,

    Encore merci.

    Comment mettre dans la variable @str que c'est un nom de champ d'une table ?

    Ma table s'appelle : tst_dts
    champ : det8

    Merci d'avance.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    tu n'as pas besoin de le définir, en sql c'est comme un autre language, le @str dit simple qu'il attend une chaine de caractères.

    donc tu créés les fonctions avec le script que je t'ai donné et tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT  @value=dbo.findvalue(det8),@DATA=dbo.finddata(det8)
    FROM tst_dts WHERE ....
    pense a mettre une restriction après le where de manière a n'avoir qu'une seule ligne remontée.

    A+
    serge
    Errare humanum est, perseverare diabolicum (Sénèque)

  9. #9
    Membre régulier Avatar de innova
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 185
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par serge0934
    tu n'as pas besoin de le définir, en sql c'est comme un autre language, le @str dit simple qu'il attend une chaine de caractères.

    donc tu créés les fonctions avec le script que je t'ai donné et tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT  @value=dbo.findvalue(det8),@DATA=dbo.finddata(det8)
    FROM tst_dts WHERE ....
    pense a mettre une restriction après le where de manière a n'avoir qu'une seule ligne remontée.

    A+
    serge
    Slt,

    J'obtiens un message d'erreur....

    Comment faire ?

    Il me dit que la fonction findata existe en double et l'autre messahe de paramètre cité précédemment :-(((

    Merci

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

Discussions similaires

  1. découpage de chaîne
    Par Delnir dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 31/05/2009, 14h52
  2. Réponses: 2
    Dernier message: 19/10/2007, 14h39
  3. Réponses: 4
    Dernier message: 19/10/2007, 09h46
  4. [Tableaux] Découpage de chaîne
    Par ssebuser dans le forum Langage
    Réponses: 10
    Dernier message: 21/12/2006, 17h12
  5. [Débutant] Découpage de chaîne
    Par wkd dans le forum WinDev
    Réponses: 4
    Dernier message: 26/07/2006, 15h43

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