MySQL - REGEX Поисковое слово из строки и совпавшего слова должно быть только в числовом или числовом формате - PullRequest
0 голосов
/ 19 декабря 2018

Вопрос: Если я передаю какое-либо слово в предложении where, тогда запрос должен возвращаться только в том случае, если переданное слово является alnum или num только с использованием регулярного выражения mysql.

У меня есть таблица с адресами.

address table 
--------------------
 id    | name
--------------------
  1    | 123 demo
--------------------
  2    | 1st demo
--------------------
  3    | 123
--------------------
  4    | demo

Пример 1

SELECT * FROM address WHERE name regexp '(^|[[:space:]])123([[:space:]]|$)'

Результат : строка 1,3 должна вернуться.у меня это работает

Пример 2

SELECT * FROM address WHERE name regexp '(^|[[:space:]])1st([[:space:]]|$)'

Результат : строка 2 должна вернуться.у меня это работает

Пример 3

SELECT * FROM address WHERE name regexp '(^|[[:space:]])demo([[:space:]]|$)'

Результат : не должно возвращаться ни одной строки.но он возвращает 1,2,4 строки

Final : Так что, если я передам "демо" в предложении where, никакой результат не вернется.

http://sqlfiddle.com/#!9/acc5c8/2

1 Ответ

0 голосов
/ 19 декабря 2018

Я хочу порекомендовать словесный синтаксис, подобный следующему: REGEXP '[[:<:]]demo[[:>:]]'

http://sqlfiddle.com/#!9/d63e05/1

Честно говоря, если бы это был мой проект, я бы сделал проверку ctype_alnum() напоиск значения, прежде чем пытаться совершить поездку в базу данных.Тем не менее, ваше требование:

только если передаваемое слово является alnum или num только с использованием mysql regex

Чтобы убедиться, что строка иглы в запросе содержит хотя бы одно числодобавьте еще одну проверку в предложение WHERE.

Более конкретно ...

SELECT * FROM address WHERE address REGEXP '[[:<:]]demo[[:>:]]' AND 'demo' REGEXP '[0-9]'

Это не вернет нужных строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...