2016-07-28 5 views
0

Ich habe eine FULLTEXT-Spalte namens 'name', die mehrere Wörter pro Zeile enthalten kann. Mit CONTAINS kann ich nach einer variablen Anzahl von Wörtern suchen, und es funktioniert, außer wenn eines der Wörter ein kaufmännisches Und enthält.MS SQL CONTAINS mit Ampersand Search

Beispiel: name = 'Bob Brown AB & CD' Dies funktioniert:

CONTAINS(name, '"*Bo*" AND "*Br*"') 

Diese nicht (jede Suche nach dem Wort mit dem Ampersand):

CONTAINS(name, '"*AB*"') 
CONTAINS(name,'"*AB&CD*"') 
CONTAINS(name,'"*&*"') 

Ich weiß, warum die letzte Suche würde nicht funktionieren, da CONTAINS nur von Anfang an sucht.

Wird das kaufmännische Und-Zeichen von FULLTEXT als Wortbruch verarbeitet? Wenn dies der Fall ist, könnte das erklären, warum eine Suche, die das kaufmännische Und-Zeichen enthält, fehlschlagen würde. Aber es würde nicht erklären warum

würde fehlschlagen.

Wie kann ich die Suche abschwächen, damit die Zeile zurückgegeben wird, wenn ich nach "AB & CD" oder einfach nur "AB" oder nur "CD" suche?

P.S. Dynamisches SQL ist keine Option, daher kann ich keine variable Anzahl von LIKEs verketten.

Antwort

0

Ich fand meine Antwort anscheinend. Ich habe

STOPLIST = OFF 

auf meinem FULLTEXT- Index, und ich kann jetzt durch "AB" und "AB & CD" erfolgreich suchen.