问题:如果我在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/acc5c8/2

最佳答案

我想推荐这样的wordboundary语法:REGEXP '[[:<:]]demo[[:>:]]'
http://sqlfiddle.com/#!9/d63e05/1
老实说,如果这是我的项目,我会在访问数据库之前检查搜索值。但是,您的要求是:
仅当传递单词是alnum或num only using mysql regex时
要确保查询中的针字符串至少包含一个数字,请在WHERE子句中添加另一个检查。
更具体地说。。。

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

这将不返回所需的行。

关于mysql - MySQL-REGEX字符串和匹配词中的搜索词只能是数字或数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53849160/

10-12 00:02
查看更多