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 :

Chaîne contenant caractère spécial dans clause CONTAINS


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut Chaîne contenant caractère spécial dans clause CONTAINS
    Bonjour,
    j'aimerais rechercher des mots (entiers), donc en utilisant "contains",dans une longue chaine qui contient plusieurs phrases (en réalité, le contenu purement textuel d'un CV).

    Seulement, lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * 
    FROM Table_Des_CV
    WHERE CONTAINS(Champ_Texte_CV, 'c++')
    --WHERE CONTAINS(Champ_Texte_CV,'"c++"'), mêmes résultats
    --WHERE CONTAINS(Champ_Texte_CV,' c++ '), mêmes résultats
    ça me renvoie tous les CV qui contiennent (au moins) un mot commençant par le caractère 'c'.

    Y a-t-il moyen de lui dire que le '+' ou '++' ne doit pas correspondre à un '%' comme pour le LIKE ?
    Peut-on dire que la chaîne '++' est à rechercher, et donc que le '+' est un caractère spécial ?

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut
    J'ai remarqué que 'C+' dans le contains renvoie les enregistrements dont le texte contient au moins un mot commençant par 'c',
    et que 'C++' dans le contains renvoie les enregistrements dont le texte contient au moins un mot commençant par 'cc'.

    Des suggestions pour indiquer le '+' en tant que caractère ?

    PS : le renvoie la chaîne 'C++', mais CONTAINS(champ, 'c' + '+' + '+') renvoie une erreur, car '+' fait a priori office d'opérateur dans la clause CONTAINS, et n'est jamais interprété comme un caractère, quelquesoit sa position ('C+C' idem)... le + est un caractère spécial comme le %

  3. #3
    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 : 44
    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
    Par défaut
    Bonsoir,

    Avez-vous essayé de mettre C++ entre guillemets ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM Table_Des_CV
    WHERE CONTAINS(Champ_Texte_CV, "c++")

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut
    Seulement, lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * 
    FROM Table_Des_CV
    WHERE CONTAINS(Champ_Texte_CV, 'c++')
    --WHERE CONTAINS(Champ_Texte_CV,'"c++"'), mêmes résultats
    --WHERE CONTAINS(Champ_Texte_CV,' c++ '), mêmes résultats
    ---------
    Merci pour ta réponse elsuket. J'ai sans doute oublié de l'énumérer, mais j'avais déjà essayé ce que tu proposes... même résultat

  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 : 44
    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
    Par défaut
    Woups, j'avais mal lu, désolé

    'Vais chercher une soluce ...

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    + n'étant pas un caractère littéral n'est pas pris en compte dans l'indexation.
    Vous ne pouvez donc pas retrouver ce mot qui n'en est pas un !
    Ce sont là quelques limites de l'indexation textuelle.
    L'indexation textuelle est faites pour des mots, pas pour des abréviations, sigles et autres acronymes.

    Deux solutions :
    1) réaliser vous même votre propre moteur d'indexation textuelle et donc gérer vous même les caractères acceptés et rejetés.
    2) remplacer à la volée la saisie de "c++" par "cplusplus", soit dans la colonne de la table, soit dans une colonne dérivée.

    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/ * * * * *

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut
    Merci pour la réponse SQLPro...

    arf, c'est dommage

    Il ne me reste plus qu'à potasser pour contourner ce "problème".


  8. #8
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Par défaut caractères non indexés
    Bonjour,

    J'ai le même problème avec les caractères > <. J'utilise des documents XML dans le champ indexé. Lorsque je fais la requète suivante :

    SELECT * FROM SEA_DOC WHERE CONTAINS(TEXT, '\>20 INPATH(//T9)',1)>0 ORDER BY Score(1) Desc;

    il me ramène aussi bien les lignes contenant <T9>20</T9> que celles qui contiennent <T9>>20</T9>.

    Si j'ai bien compris il y aurai des caractères non indexés alors lesquels ?

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/11/2008, 18h36
  2. Convertir une chaîne de caractère (saisie dans un textbox) en décimal
    Par sab_etudianteBTS dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/09/2007, 21h17
  3. Réponses: 4
    Dernier message: 10/04/2007, 11h10
  4. [VBA-EXCEL] Caractère spécial " dans requete sql
    Par rafnt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/09/2006, 16h26
  5. Insertion caractère spécial dans un fichier
    Par lenouvo dans le forum MFC
    Réponses: 2
    Dernier message: 01/02/2006, 11h30

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