Ich habe eine Tabelle mit den folgenden Texten und das Schlüsselwort, nach dem ich suche, ist 'Suche'. Also habe ich eine Abfrage geschrieben
SELECT [ID]
,[TextValue]
FROM
[dbo].[SearchLike]
WHERE
[TextValue] LIKE '%Search%'
Q.1 Wie kann ich die Abfrage so ändern, dass nur die Datensätze mit "Suche" im Text zurückgegeben werden und nicht "LSearch" verwendet werden sollte? dh gemäß dem Bild werden die ersten drei Datensätze nur zurückgegeben.
Antworten:
Verwenden von LIKE
Einzeilige Suche:
Ohne Auffüllen müssen Sie speziell mit Zeichenfolgen umgehen, die am Anfang / Ende der Zeichenfolge erscheinen:
Verwenden von FULLTEXT INDEX
Edit2 für die Volltextpuristen
CREATE FULLTEXT INDEX
auf MSDN-Status für die Option AUTO (Standardeinstellung)Daher gibt es möglicherweise keine korrekten Ergebnisse. Aber dann ein paar Sekunden später wird es.
Für bis zu einige 10k-Zeilen ist die Leistung ausreichend: Es wird O (n) skaliert. Ich verwende das LIKE für eine Tabelle mit etwa 25.000 Zeilen, aber Benutzer wissen, dass es schlecht funktioniert, wenn sie auf diese Weise suchen (es befindet sich auf einer "erweiterten" Seite). Ich gewinne den Kompromiss durch die Verwaltung eines Volltextindex
Die Volltextsuche ist nicht die richtige Lösung, sondern eine Option
Hinweis: Die Erfahrung hat mir gezeigt, dass die FullText-Indizierung in SQL Server schwerwiegende Auswirkungen auf die Leistung hat, dh: Nur implementieren, wenn Sie dies wirklich benötigen und wissen, was Sie tun! (@ Andrew Bickerton)
quelle
Wenn Ihre Tabelle eine nicht triviale Anzahl von Zeilen enthält, können Sie stattdessen einen FULLTEXT-Index verwenden. Es wird viel schneller sein und genau auf das Wort passen.
Suchen Sie nun nach Ihrem Text:
Mehr zu:
quelle
Ich weiß nicht, ob SQL Server
\b
Regexes unterstützt (Übereinstimmung mit Wortgrenzen). Und Sie müssen eine benutzerdefinierte Funktion erstellen, um den Regex-Abgleich überhaupt zu ermöglichen. Wenn dies jedoch der Fall ist, können Sie Folgendes tun :Wenn dies nicht der Fall ist, sollten Sie weiterhin in der Lage sein, Folgendes zu tun:
quelle