Совпадение знака «%» при поиске в базе данных MySQL - PullRequest
6 голосов
/ 04 декабря 2010

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

Ответы [ 5 ]

5 голосов
/ 04 декабря 2010

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

Руководство ясно говорит:

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

Поиск % в Stack%Overflow:

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

Поиск % в StackOverflow:

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

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

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

0 голосов
/ 14 сентября 2017

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

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

привет

0 голосов
/ 04 декабря 2010

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

mysql_query("select * from bla where bli like '\\%somewords\\%'");
0 голосов
/ 04 декабря 2010

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

0 голосов
/ 04 декабря 2010

Вот пример:

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