Heim  >  Artikel  >  Datenbank  >  Beispielerklärung für eine SQL-Fuzzy-Abfrage

Beispielerklärung für eine SQL-Fuzzy-Abfrage

零下一度
零下一度Original
2017-07-26 14:52:501820Durchsuche

Vorwort

Wenn es um Fuzzy-Abfragen in SQL geht, sollte einem als Erstes das Schlüsselwort like in den Sinn kommen.

Wenn wir Daten abfragen müssen, die ein bestimmtes Feld enthalten, verwenden wir häufig die Abfragemethode „%keyword%“. Zum Beispiel:


SELECT ... FROM 表名 WHERE 字段名 LIKE '%关键字%'

Dies sollte als typische „enthält XXX“-Methode betrachtet werden, aber was ist, wenn wir Daten abfragen müssen, deren Felder in bestimmten Zeichen enthalten sind? ?

Zum Beispiel habe ich eine Kontaktdatentabelle ConnectName, die ein Feld zum Aufzeichnen von Namen enthält. Ich möchte die Kontaktinformationen der Personen Xiaolan und Haiyuan erhalten. Unter normalen Umständen fällt uns als Erstes Folgendes ein:


SELECT * FROM ConnectName 
WHERE
  name = '小兰'
  OR name = '灰原'

Dieser Ansatz kann diesen Zweck erreichen. Wenn ich zu diesem Zeitpunkt plötzlich eine andere Person überprüfen möchte, beispielsweise „Conan“, müssen wir die SQL-Struktur ändern und einen Where-Bedingungssatz hinzufügen:


SELECT * FROM ConnectName 
WHERE
  name = '小兰'
  OR name = '灰原'
  OR name = '柯南'

Wir wissen, dass die OR-Bedingungsabfrage selbst ineffizient ist und die Strukturänderungsanweisung in MyBatis etwas schwieriger zu implementieren ist (natürlich kann sie auch implementiert werden, indem man einfach die eingefügten Felder durchläuft).

Kann es einfacher sein? Kann ich alle Schlüsselwörter zusammenfassen und nur eine Where-Bedingung verwenden, um dies zu erreichen?

CHARINDEX erscheint

Zu diesem Zeitpunkt können wir das Schlüsselwort CHARINDEX verwenden, um ein bestimmtes Feld zurückzugeben, das in einer Textzeichenfolge erscheint Die Position ähnelt der Verwendung von Strings indexOf. Lassen Sie uns ohne weiteres eine Kastanie angeben:


CHARINDEX('李白','曹操很帅') =0

In der Kastanie oben ist sie nicht enthalten, da Cao Cao ist ein sehr schönes Schlüsselwort, daher kann es nicht gefunden werden, und der Index der Zeichen wird 1 zurückgegeben.

Nachdem wir verstanden haben, wie es verwendet wird, können wir das Schlüsselwort CHARINDEX zur Optimierung verwenden unsere SQL-Anweisung:

CHARINDEX('李白','李白很帅') =1

Wenn der dem Namensfeld entsprechende Name in „Conan Xiaolan Haibara“ erscheint, dann gibt die CHARINDEX-Funktion einen Wert größer als 1 zurück, und wir können die Daten bekommen, die wir wollen (die drei können auch fröhlich zusammen spielen) ^-^)

Die entsprechende mybatis-Implementierung ist auch relativ einfach

SELECT * FROM ConnectName 
WHERE
  CHARINDEX(name ,'小兰灰原柯南')>0

Wenn wir später eine neue Person hinzufügen möchten, beispielsweise Mouri Kogoro, müssen Sie nur „Xiaolan Haibara Conan Mouri Kogoro“ zu den eingehenden Parametern hinzufügen.

Das obige ist der detaillierte Inhalt vonBeispielerklärung für eine SQL-Fuzzy-Abfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn