Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich in MySql nach einem Ausdruck wie O'% suchen?

Sie haben einen buchstäblichen Backslash eingefügt. Das reicht:

SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'

Zum Testen:

SELECT 'O\\\'Brien', 'O\'Brien'

Aktualisierung: Es gibt bereits eine akzeptierte Antwort, also füge ich nur ein paar Erläuterungen hinzu.

Erstens hatte ich übersehen, dass gespeicherte Daten beschädigt waren. Das erklärt natürlich, warum person_sname = 'O\\\'Brien' ist wahr.

Zweitens der \ Zeichen hat zwei Verwendungen in der MySQL-Syntax:

  1. Es ist das Zeichen, das verwendet wird, um Escape-Sequenzen :\n , \t ...
  2. Es ist das Standard-Escape-Zeichen, um das Literal % einzufügen und _ Zeichen in LIKE-Ausdrücken :foo LIKE '%abc\%def%'

Das Problem ist, dass das Einfügen eines \ -Symbol in einem LIKE-Ausdruck löst beide Verhaltensweisen aus, sodass Sie tatsächlich vier einfügen müssen Backslashes, um eins zu erhalten :

person_sname like 'O\\\\\'Brien'

... es sei denn, Sie ändern die zweite Bedeutung mit dem ESCAPE Klausel:

person_sname like 'O\\\'Brien' escape '|'

Wenn die Daten nicht beschädigt wurden, können Sie natürlich einfach:

person_sname = 'O\'Brien'
person_sname like 'O\'Brien'