用于在字符串中查找完全匹配的正则表达式适用于其他地方,但不适用于 MySql 查询
Regex to find exact match in a string works elsewhere but not on MySql Query
给定的字符串是逗号分隔值,例如下面的字符串
29,30,31,32,33,34,35,36,192,225,228,233,239,240,144,145
我想找到字符串中任意数字的完全匹配,我确实写了一个正则表达式来找到它。当我在 regex101 上检查它时,它运行良好。但是当我在 MySql 查询上写相同的正则表达式时,它不起作用
(SELECT * FROM table_name WHERE (value REGEXP '.*\b22\b,{0,1}.*')
我确实找到了另一个有效的查询,它使用了 concat() 函数。
SELECT * FROM table_name WHERE CONCAT(',',value,',') like '%,22,%'
编辑:@anubhava 的答案也有效(可以在这个问题的第一条评论中找到)。由于我只能选择一个答案作为已解决,所以我只是想让其他人知道。
再次感谢
在您的 MySQL 版本中,最有可能的词边界由 [[:<:]]
和 [[:>:]]
表示:
SELECT *
FROM table_name
WHERE value REGEXP '[[:<:]]22[[:>:]]';
我相信从MySQL8+开始,可以用更标准的\b
来表示一个词界。查看下面的演示 link 以了解它在 MySQL 5.7.
上的运行情况
有一个函数专门用于此任务:
WHERE FIND_IN_SET('22', '29,30,31,32,33,34,35,36,192,225,228,233,239,240,144,145')
给定的字符串是逗号分隔值,例如下面的字符串
29,30,31,32,33,34,35,36,192,225,228,233,239,240,144,145
我想找到字符串中任意数字的完全匹配,我确实写了一个正则表达式来找到它。当我在 regex101 上检查它时,它运行良好。但是当我在 MySql 查询上写相同的正则表达式时,它不起作用
(SELECT * FROM table_name WHERE (value REGEXP '.*\b22\b,{0,1}.*')
我确实找到了另一个有效的查询,它使用了 concat() 函数。
SELECT * FROM table_name WHERE CONCAT(',',value,',') like '%,22,%'
编辑:@anubhava 的答案也有效(可以在这个问题的第一条评论中找到)。由于我只能选择一个答案作为已解决,所以我只是想让其他人知道。
再次感谢
在您的 MySQL 版本中,最有可能的词边界由 [[:<:]]
和 [[:>:]]
表示:
SELECT *
FROM table_name
WHERE value REGEXP '[[:<:]]22[[:>:]]';
我相信从MySQL8+开始,可以用更标准的\b
来表示一个词界。查看下面的演示 link 以了解它在 MySQL 5.7.
有一个函数专门用于此任务:
WHERE FIND_IN_SET('22', '29,30,31,32,33,34,35,36,192,225,228,233,239,240,144,145')