用于在字符串中查找完全匹配的正则表达式适用于其他地方,但不适用于 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.

上的运行情况

Demo

有一个函数专门用于此任务:

WHERE FIND_IN_SET('22', '29,30,31,32,33,34,35,36,192,225,228,233,239,240,144,145')