问题:如果我在where子句中传递任何单词,那么查询应该仅在传递的单词是alnum或num only using mysql regex时返回。
我有一个地址表。
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行
最后:如果我在where子句中传递“demo”,那么就不会返回任何结果。
http://sqlfiddle.com/#!9月8日
1条答案
按热度按时间2eafrhcq1#
我想推荐如下的wordboundary语法:
REGEXP '[[:<:]]demo[[:>:]]'
http://sqlfiddle.com/#!9/d63e05/1号老实说,如果这是我的项目,我会做一个
ctype_alnum()
在费心访问数据库之前,先检查一下搜索值。但是,您的要求是:仅当传递单词是alnum或num only using mysql regex时
要确保查询中的指针字符串至少包含一个数字,请向where子句添加另一个检查。
更具体地说。。。
这将不返回所需的行。