430 Stimmen

Wie kann ich in einer Spalte mit dem Platzhalter LIKE (ohne Berücksichtigung der Groß-/Kleinschreibung) suchen?

Ich habe mich etwas umgesehen und nicht gefunden, was ich gesucht habe, also geht es los.

SELECT * FROM trees WHERE trees.`title` LIKE  '%elm%'

Das funktioniert gut, aber nicht, wenn der Baum Elm oder ELM usw. heißt.

Wie kann ich die Groß- und Kleinschreibung in SQL für diese Platzhaltersuche nicht berücksichtigen?

Ich verwende MySQL 5 und Apache.

438voto

cwallenpoole Punkte 75701

Ich habe das immer mit lower gelöst:

SELECT * FROM trees WHERE LOWER( trees.title ) LIKE  '%elm%'

327voto

Quassnoi Punkte 396418
SELECT  *
FROM    trees
WHERE   trees.`title` COLLATE UTF8_GENERAL_CI LIKE '%elm%'

Tatsächlich, wenn Sie hinzufügen COLLATE UTF8_GENERAL_CI in die Definition Ihrer Spalte einfügen, können Sie all diese Tricks einfach weglassen: Es wird automatisch funktionieren.

ALTER TABLE trees 
 MODIFY COLUMN title VARCHAR(…) CHARACTER 
 SET UTF8 COLLATE UTF8_GENERAL_CI. 

Dadurch werden auch alle Indizes für diese Spalte neu erstellt, so dass sie für die Abfragen ohne führendes '%' verwendet werden können.

54voto

Federico Piragua Punkte 519

Dies ist das Beispiel für eine einfache LIKE-Abfrage:

SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'

Jetzt wird die Groß- und Kleinschreibung mit der Funktion LOWER() nicht berücksichtigt:

SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')

54voto

aioobe Punkte 397211

Die Unterscheidung zwischen Groß- und Kleinschreibung wird in den Einstellungen für Spalten/Tabellen/Datenbanksortierung festgelegt. Sie können die Abfrage unter einer bestimmten Sortierung auf folgende Weise durchführen:

SELECT *
FROM trees
WHERE trees.`title` LIKE '%elm%' COLLATE utf8_general_ci

zum Beispiel.

(Ersetzen utf8_general_ci mit der von Ihnen als nützlich erachteten Sortierung). Die _ci steht für Groß- und Kleinschreibung wird nicht berücksichtigt .

51voto

Vi8L Punkte 848

Verwenden Sie einfach :

"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE  '%elm%'";

Oder verwenden

"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE  '%elm%'";

Beide Funktionen funktionieren gleich

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X