MYSQL使用REGEXP

时间:2017-08-10 05:36:13

标签: mysql regex

这是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,%)

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

1 个答案:

答案 0 :(得分:1)

您可以在这里使用FIND_IN_SET()

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

FIND_IN_SET()搜索CSV列表中的第一个参数作为第二个参数。它处理试图筛选逗号以查找数据的混乱。话虽如此,您通常应避免在表中使用CSV,因为它使查询变得困难且性能不理想。最好将表中的每个金额标准化为与给定ID相关联的单独记录。

<强>输出:

enter image description here

在这里演示:

Rextester