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 d'une chaîne de caractère avec SQL


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut Extraction d'une chaîne de caractère avec SQL
    Bonjour à toutes et à tous,
    j'ai un problème d'extraction d'une chaine de caractère contenu dans un champ d'une table.En effet mon champ txtNom de ma table LESNOM contient plusieurs enregistrements de chaines de caractère.J'aimerai pour certains enregistrements extraire une sous chaine.Sachant ce n'est que certains enregistrements qui contiennent la sous chaine.
    Je dispose des fonctions suivantes:
    Substring pour l'extraction et Char_length pour tester le nombre de caratère.Mon souci est délicat à mon avis car il me faut absolument une seule ordre sql et non plusieurs.
    Voilà ce que j'ai pu faire mais ...
    SQL="Select txtNom Substring(txtNom from 12 for 4) from LESNOM where char_length(txtNom)=16"Remarque je sais que la longueur des enregistrements contenants la sous chaine cherchée est égale à 16.
    Je me pose aussi la question de savoir si la fonction char_length peut aussi s'utiliser ainsi?Je vous remercie d'avance de votre aide.ça fait plusieurs jours que je suis coincé.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Salut,

    perso je vux bien t'aider mais j'ai rien compris à ce que tu veux faire, en plus tu utilises des noms de fonctions qui ne sont pas du SQL.

    1- Quelle est la version de ton serveur SQL ?
    2- Tu veux faire la requete sur serveur ou via un client ODBC, ADO, ..
    3- Et tu veux extraire quelle sous-chaine ??????

  3. #3
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    euh... je ne sais pas ce qui m'arrive, mais je ne comprends rien aux messages d'aujourd'hui...
    char_length() ?
    Substring(txtNom from 12 for 4) ?

    De quel SGBD parle-ton ici ?
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    salut rudib, pour une fois c moi qui est gagné

  5. #5
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Salut,
    Dans l'ordre oui, mais pour le temps, on est ex aequo
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  6. #6
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    [mode compilateur ON]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUBSTRING(txtNom,12,4) FROM LESNOM WHERE LEN(txtNom) = 16;
    [mode compilateur OFF]

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Merci de votre réponse.
    En effet je me suis mal exprimé car je ne veux pas extraire une partie des données de mon champ mais faire une comparaison avec une liste de valeur.
    Je veux cette fois pouvoir m'expliquer correctement.
    J'ai une table "MATABLE" et je compte sélectionner le champ "NOMPRENOM" dont une partie des données du champ figure dans la liste que je propose.
    Exemple:
    Dans la table "MATABLE", le champ "NOMPRENOM" contient les éléments suivant :
    (.9ard.ez78.7896.,.7aze.6y,.9ard.ez78.7796.,.7896.,.9ard.ez78.7895.,.9ard.fz78.7895.,.7aze.)
    Je souhaite alors sélectioner ce champ dont les quatres chiffres de droite appartienent à la liste ('7896','7895').
    Dans cet exemple voilà les trois éléments sélectionés:
    .9ard.ez78.7896.
    .9ard.ez78.7895.
    .9ard.fz78.7895.

    Il faut remarquer que les éléments du champ suceptibles de contenir un élément de la liste ont 16 caractères.donc il faut faire je suppose une comparaison entre cette partie des données du champ et la liste, ce que je ne sais pas faire.
    Voilà ce que je penses:
    Select NOMPRENOM from MATABLE
    Where xxxxxxxxxxxxxxxx in ('val1','val2','val3')

    la partie "xxxxxxxxxxxxxxxxxx" c'est ce que je n'arrive pas à faire.C'est à dire les quatres derniers chiffres(ou les 5 derniers caractères moins le point) des éléments du champ ayant au moins 16 caratères.
    J'ai essayé comme j'ai pu je suppose que cette fois ci vous allez comprendre.
    Je vous remercie encore de votre aide.



    -------------------------------------

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    ben dans ce cas :
    1- Si tu es sur que tu as TOUJOURS 4 chiffres à la fin et un point, pas un de plus ni un de moins, en SQL t'as une fonction qui s'appelle RIGHT. Cherche dans l'aide SQL comment l'utiliser

    2- Si tu peux n'avoir qu'un, deux, ou 3 chiffres, alors il te faut d'about trouver la position du l'avant dernier point en utilisant la fonction CHARINDEX, puis ensuiite faire une comparaison avec RIGHT avec comme longueur (DATALENTGH(taColonn) - positiondeavantdernierpoint

    courage c'est simple ce que tu demandes

  9. #9
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Je me présente, je suis .9ard.ez78.7796.
    Bien sûr, 7796 est mon prénom

    Qqch comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select NOMPRENOM from MATABLE
    Where RIGHT(REPLACE(NOMPRENOM, '.', ''), 4) in ('val1','val2','val3')
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  10. #10
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Zers, tu gagnes haut la main !
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par rudib
    Zers, tu gagnes haut la main !


    Mais à partir de la semaine prochaine, ni toi ni moi ne pourrons participer au concours si j'ai bien suivi

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Merci tout le monde,
    rudib a écrit mais je crois ça ne répond pas à ma question car si je prends Where RIGHT(REPLACE(NOMPRENOM, '.', ''), 4) in ('val1','val2','val3'), alors dans mon exemple j'aurai en plus de ces réponses:
    .9ard.ez78.7896.
    .9ard.ez78.7895.
    .9ard.fz78.7895.

    celle ci:
    .7896.
    qui repond à ta clause where alors que je souhaite que la clause s'applique aux éléments ayant 16 caratères.

    Quand à Zers, ce dont je suis sûr c'est que les éléments de la liste ont toujours quatre caractères, alors que les éléments du champ ont au plus 16 caractères et c'est ceux ayant 16 caractères qui contiennent les éléments de la liste.Toutefois ceux ayant un nombre inférieur à 16 peuvent contenir les éléments de la liste mais ne doivent pas rentrer dans réponse à obtenir.C'est là la contrainte.

    Je vous remercie encore.

  13. #13
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    D'accord,

    alors je te propose un dernier quizz : chercher LEN(), et l'opérateur AND dans l'aide en ligne, et voir comment cela peut s'appliquer à ton problème.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  14. #14
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    re,

    Citation Envoyé par opeo
    Dans la table "MATABLE", le champ "NOMPRENOM" contient les éléments suivant :
    (.9ard.ez78.7896.,.7aze.6y,.9ard.ez78.7796.,.7896.,.9ard.ez78.7895.,.9ard.fz78.7895.,.7aze.)
    Je souhaite alors sélectioner ce champ dont les quatres chiffres de droite appartienent à la liste ('7896','7895').
    Dans cet exemple voilà les trois éléments sélectionés:
    .9ard.ez78.7896.
    .9ard.ez78.7895.
    .9ard.fz78.7895.
    Ca devrait retourner ce que tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  	nomprenom
    FROM	latable
    WHERE 	LEN(nomprenom) = 16 
    AND	SUBSTRING(nomprenom,12,4) in ('7896','7895')

Discussions similaires

  1. Comment hacher une chaîne de caractères avec MD5
    Par dalilnet dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 20/08/2008, 14h44
  2. extraction d'une chaîne de caractère
    Par mackla dans le forum C
    Réponses: 14
    Dernier message: 14/04/2008, 09h13
  3. [BO 5.1] Extraction dans une chaîne de caractères
    Par ruton dans le forum Débuter
    Réponses: 2
    Dernier message: 22/03/2008, 15h06
  4. [FAQ] Comment tester une chaîne de caractères avec une expression régulière ?
    Par Baptiste Wicht dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 20/11/2007, 19h43
  5. Extraction d'une chaîne de caractère
    Par Hathor dans le forum VBScript
    Réponses: 1
    Dernier message: 25/04/2007, 07h36

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