2010-05-21 3 views
7

Comment échapper un caractère guillemet dans une fonction MS SQL 'contient'?Comment échapper des guillemets doubles dans une fonction SQL 'fulltext'?

SELECT decision 
FROM table 
WHERE CONTAINS(decision, '34" AND wide') 

contient normalement() attend des guillemets doubles pour entourer une expression exacte de match, mais je veux rechercher un double caractère de citation réelle. J'ai essayé d'y échapper avec \, `, et même une autre double citation, mais rien de tout cela n'a fonctionné.

P.S. Je réalise qu'un exemple simple comme ceci pourrait également être fait en utilisant l'instruction LIKE, mais j'ai besoin d'utiliser la fonction de recherche fulltext. La requête que j'ai fournie ici a été simplifiée à partir de ma requête actuelle à titre d'exemple.

+0

Question connexe que OP a déjà vu: http://stackoverflow.com/questions/387198/escape-double-quotes-in-sql-2005-2008 – bernie

Répondre

5

De documentation:

Ponctuation est ignoré. Par conséquent, CONTAINS(testing, "computer failure") correspond à une ligne avec la valeur, "Où est mon ordinateur? Impossible de trouver ce serait cher."

Depuis FULLTEXT ne indexe même pas la ponctuation, vous aurez besoin d'affiner-filtrer vos résultats en utilisant LIKE:

SELECT decision 
FROM table 
WHERE CONTAINS(decision, '34 AND wide') 
     AND decision LIKE '%34"%' 

Cela permettra de préserver les avantages du texte intégral.

2

La réponse ci-dessus ne fonctionne pas dans SQL Server 2008 si votre chaîne est pour un nombre à un seul chiffre.

Cela fonctionne:

SELECT partdescription 
FROM table 
WHERE CONTAINS(partdescription, '10') 
     AND decision LIKE '%10"%' 

Cela ne fonctionne pas:

SELECT partdescription 
FROM table 
WHERE CONTAINS(partdescription, '6') 
     AND decision LIKE '%6"%'' 

EDIT: Explication des raisons pour lesquelles un seul chiffre ne peut pas être indexé.

Si la liste de mots d'arrêt SYSTEM (ou mot de bruit) est utilisée, elle contient chacun des chiffres numériques comme des mots à ignorer. Vous pouvez modifier le contenu de la liste Stop Word ou désactiver complètement les mots Stop. Une fois l'un de ces changements effectué, le texte affecté doit être réindexé avant que les chiffres ne puissent être recherchés. Après la réindexation, il sera en effet possible de rechercher "6".

+0

J'ai mis à jour l'explication pour comprendre pourquoi un seul chiffre va ou va ne pas être indexé. – RLF

Questions connexes