Ich brauche eine Auswahl, die folgende Ergebnisse liefert:
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
Und ich brauche alle Ergebnisse, dh dies schließt Zeichenfolgen mit 'Wort2 Wort3 Wort1' oder 'Wort1 Wort3 Wort2' oder einer anderen Kombination der drei ein.
Alle Wörter müssen im Ergebnis enthalten sein.
word3 word2 word1
.Beachten Sie, dass Sie, wenn Sie
LIKE
bestimmen möchten, ob eine Zeichenfolge eine Teilzeichenfolge einer anderen Zeichenfolge ist, die Mustervergleichszeichen in Ihrer Suchzeichenfolge maskieren müssen.Wenn Ihr SQL-Dialekt unterstützt
CHARINDEX
, ist es viel einfacher, ihn stattdessen zu verwenden:Beachten Sie außerdem, dass dies und die Methode in der akzeptierten Antwort nur die Teilzeichenfolgenübereinstimmung und nicht die Wortübereinstimmung abdecken. So zum Beispiel die Zeichenfolge
'word1word2word3'
würde immer noch übereinstimmen.quelle
InStr()
stattdessen verwendenCHARINDEX
Funktion
Abfrage
quelle
Fügen Sie stattdessen
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'
Und zwischen diesen Wörtern wie:Weitere Informationen finden Sie hier https://msdn.microsoft.com/en-us/library/ms187787.aspx
AKTUALISIEREN
Verwenden Sie zum Auswählen von Phrasen doppelte Anführungszeichen wie:
ps Sie müssen zuerst die Volltextsuche in der Tabelle aktivieren, bevor Sie das Schlüsselwort enthält verwenden. Weitere Informationen finden Sie hier https://docs.microsoft.com/en-us/sql/relational-databases/search/get-started-with-full-text-search
quelle
Geändert
OR
zuAND
basierend auf Bearbeiten zu Frage.quelle
Wenn Sie Oracle Database verwenden , können Sie dies mithilfe der enthaltenen Abfrage erreichen. Enthält Abfragen sind schneller als ähnliche Abfragen.
Wenn Sie alle Wörter brauchen
Wenn Sie eines der Wörter benötigen
Enthält einen Bedarfsindex vom Typ CONTEXT für Ihre Spalte.
quelle
Wenn Sie nur eine Übereinstimmung finden möchten.
SQL Server :
Um eine genaue Übereinstimmung zu erhalten. Beispiel
(';a;ab;ac;',';b;')
wird keine Übereinstimmung erhalten.quelle
Versuchen Sie, die "Tesarus-Suche" im Volltextindex in MS SQL Server zu verwenden. Dies ist viel besser als die Verwendung von "%" bei der Suche, wenn Sie Millionen von Datensätzen haben. Tesarus haben einen geringen Speicherverbrauch als die anderen. versuche diese Funktionen zu durchsuchen :)
quelle
Der beste Weg ist, einen Volltextindex für eine Spalte in der Tabelle zu erstellen und statt LIKE enthalten zu verwenden
quelle
Warum nicht stattdessen "in" verwenden?
quelle
Eine der einfachsten Möglichkeiten, um das zu erreichen, was in der Frage erwähnt wird, ist die Verwendung von CONTAINS mit NEAR oder '~'. Zum Beispiel würden die folgenden Abfragen uns alle Spalten geben, die speziell Wort1, Wort2 und Wort3 enthalten.
Außerdem gibt CONTAINSTABLE für jedes Dokument einen Rang zurück, der auf der Nähe von "Wort1", "Wort2" und "Wort3" basiert. Wenn ein Dokument beispielsweise den Satz "Das Wort1 ist Wort2 und Wort3" enthält, ist seine Rangfolge hoch, da die Begriffe näher beieinander liegen als in anderen Dokumenten.
Eine andere Sache, die ich hinzufügen möchte, ist, dass wir Proximity_term auch verwenden können, um Spalten zu finden, bei denen sich die Wörter innerhalb eines bestimmten Abstands zwischen ihnen innerhalb der Spaltenphrase befinden.
quelle
Dies sollte idealerweise mit Hilfe der SQL Server-Volltextsuche erfolgen, wenn Sie verwenden. Wenn Sie dies jedoch aus irgendeinem Grund nicht in Ihrer Datenbank zum Laufen bringen können, finden Sie hier eine leistungsintensive Lösung:
quelle
Dadurch werden alle Datensätze angezeigt, in denen
column1
ein Teilwert enthalten istword
.quelle
quelle
oder
quelle