2009-04-08 11 views
3

Ich verwende ein Prädikat contains, um Ausdrücke in einem indizierten SQL Server-Textfeld zu finden. Gibt es eine Möglichkeit, den Teil des Textfelds zurückzugeben, der die gesuchte Phrase enthält, oder einen Bereich um sie herum?Geben Sie den umgebenden Text für den Ausdruck in der Volltextsuche ein. SQL 2005

Zum Beispiel, wenn ich suche nach "alle Männer sind gleich" in der Gettysburg Adresse (Auszug unten), möchte ich zurückkehren "gewidmet dem Vorschlag, dass alle Männer gleich sind" z. etwas Text um es herum.

Antwort

2

Nun, ich bin nicht vertraut mit SQL Server sintax, aber Sie könnten das Auftreten innerhalb des Feldes finden und eine Teilzeichenfolge für sie zurückgeben. Pseudo-Code:

SELECT 
    SUBSTRING(field, MAX(0, STRPOS(field, 'all men are equal' - 20), STRLEN('all men are equal') + 40) 
FROM 
    yourtable 
WHERE 
    field CONTAINS 'all men are equal' 

Damit sind Sie die Position des Teils nur für die Datensätze zu finden, die den Begriff und eine Zeichenfolge 40 Zeichen länger zurückkehren, so etwas wie das funktionieren soll.

0

Ich stolperte gerade über das, während ich versuchte, etwas Ähnliches zu erreichen. Aufbauend auf Antwort von Seb, implementiert ich folgenden unser Problem zu lösen:

SELECT '...' + SUBSTRING(@TextToParse, CHARINDEX(@TheKeyword, @TextToParse)-150, 350) + '...' 

Dies wird das Schlüsselwort oder eine Phrase von 150 Zeichen voran zurückzukehren. 350 Zeichen werden insgesamt zurückgegeben. Ändern Sie diese Nummern nach Bedarf. Auch die Ellipsen sind am Anfang und am Ende enthalten, da dieser Code es nicht ermöglicht, Brüche in der Mitte von Wörtern zu vermeiden.