这是table
:
ID | Amount
---|---
0 | 1,2,3
1 | 11,12,13
2 | 21,23
3 | 2,3
单元格可以包含任意数字的逗号分隔的任何数字。我需要选择 Amount 为2的行。由于MYSQL REGEXP不支持lookaheads / lookbehinds,我正在使用正确的正则表达式来实现这一点。如果有一个更有效的解决方案而不是正则表达式,我愿意接受建议。
实现这一目标的方法是
SELECT * FROM table WHERE
(Amount LIKE '2' OR Amount LIKE '%,2' OR Amount LIKE '2,%' OR Amount LIKE '%,2,%)
,但我宁愿避免这种情况。
答案 0 :(得分:1)
您可以在这里使用FIND_IN_SET()
:
SELECT *
FROM table
WHERE FIND_IN_SET('2', Amount) > 0
FIND_IN_SET()
搜索CSV列表中的第一个参数作为第二个参数。它处理试图筛选逗号以查找数据的混乱。话虽如此,您通常应避免在表中使用CSV,因为它使查询变得困难且性能不理想。最好将表中的每个金额标准化为与给定ID
相关联的单独记录。
<强>输出:强>
在这里演示: