Совпадение знака "%" при поиске в базе данных MySQL

Я хотел бы соответствовать этому 'wildcard %' в MySQL.
Я пытался использовать побег \% и это не работает.

5 ответов

Решение

Экранирующий символ по умолчанию \, Так что просто префикс % с \ как: \%:

В руководстве четко сказано:

Чтобы проверить наличие буквенных символов подстановочного знака, перед ним должен быть escape-символ. Если вы не укажете символ ESCAPE, подразумевается "\".

Ищи % в Stack%Overflow:

mysql> select 'Stack%Overflow' like '%\%%';
+------------------------------+
| 'Stack%Overflow' like '%\%%' |
+------------------------------+
|                            1 |  <----- Found
+------------------------------+
1 row in set (0.00 sec)

Ищи % в Stackru:

mysql> select 'Stackru' like '%\%%';
+-----------------------------+
| 'Stackru' like '%\%%' |
+-----------------------------+
|                           0 |   <----- Not Found
+-----------------------------+
1 row in set (0.00 sec)

РЕДАКТИРОВАТЬ:

Если вы вызываете этот запрос из PHP, вам придется использовать \\, Это потому, что даже PHP использует \ как побег персонажа. Так что сделайте MySQL получить \ тебе нужно иметь \\ в PHP.

Вам также нужно экранировать строку PHP \ in, иначе PHP подумает, что вы на самом деле экранируете%, отправляя таким образом литерал% в запрос sql, поэтому я думаю, что это должно сработать:

mysql_query("select * from bla where bli like '\\%somewords\\%'");

Вот пример:

$sql = 'SELECT * FROM tableName WHERE fieldName LIKE "wildcard\%"';

В последней версии вы также можете попробовать

select * from tbl1 where TxtExpr REGEXP '^%';

С уважением

Хорошо, мне нужно использовать doble (\\) чтобы соответствовать% в базе данных

Другие вопросы по тегам