MYSQL 使用 REGEXP

标签 mysql regex

这是表格:

ID | Amount
---|---
0  | 1,2,3
1  | 11,12,13
2  | 21,23
3  | 2,3

单元格可以有任意数量的由逗号分隔的任意数字。我需要选择金额为 2 的行。由于 MYSQL REGEXP 不支持先行/后行,因此我需要一个正确的正则表达式来实现此目的。如果有比正则表达式更有效的解决方案,我愿意接受建议。

实现这一点的菜鸟方法是

SELECT * FROM table WHERE
(Amount LIKE '2' OR Amount LIKE '%,2' OR Amount LIKE '2,%' OR Amount LIKE '%,2,%)

,但我宁愿避免这种情况。

最佳答案

您可以使用 FIND_IN_SET()这里:

SELECT *
FROM table
WHERE FIND_IN_SET('2', Amount) > 0

FIND_IN_SET() 在 CSV 列表中搜索第一个参数作为第二个参数。它可以处理试图通过逗号筛选来查找数据的困惑情况。话虽这么说,您通常应该避免在表中使用 CSV,因为它会使查询变得困难并且性能不理想。最好规范化您的表,将每个金额放在与给定 ID 关联的单独记录中。

输出:

enter image description here

此处演示:

Rextester

关于MYSQL 使用 REGEXP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45605230/

相关文章:

java - 如何在java中获得良好的正则表达式性能

android - 如何将任何硬代码值与数据库返回值连接或绑定(bind)?

mysql - 按升序对日期进行排序

python - 正则表达式:查找单词但不允许重复

javascript - 如何防止这个用空格替换连字符的正则表达式也用额外的连字符替换连字符?

javascript - 提取变量名的正则表达式

c# - 用 .Replace() 替换整个单词 using\b 不起作用

mysql - MySQL 限制中的变量

php - mysql utcdate 字符串比较 codeigniter

php - 从 mysql_fetch_array 结果获取行号