这是表格
:
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
关联的单独记录中。
输出:
此处演示:
Rextester
关于MYSQL 使用 REGEXP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45605230/