MySQL使用REGEX匹配逗号分隔值中的术语的存在

时间:2010-10-21 12:18:34

标签: sql database mysql

我有一个MySQL select语句困境让我偏离了一点点。在某一列中,我有一个类别术语。此术语可能类似于“类别”,或者可能包含多个CSV,如下所示:“类别,银行特殊”。

我需要在逗号分隔值中检索包含术语“bank special”的所有行。目前我正在使用以下SQL语句:

SELECT * FROM tblnecklaces WHERE nsubcat REGEXP 'bank special';

现在这可行,但是如果我有以下类别:'钻石特殊',那么仍然会检索该行,因为我的列中的术语“特殊”似乎正在匹配在我的REGEXP声明中使用“银行特殊”一词。

我如何仅检查整个短语“银行特殊”的存在,而不是部分匹配这些词?

非常感谢您的时间和帮助

3 个答案:

答案 0 :(得分:1)

最简单的解决方案是使用LIKE子句(%是通配符):

SELECT * FROM tblnecklaces WHERE nsubcat LIKE '%bank special%';

请注意,LIKE也比REGEXP快得多。

答案 1 :(得分:1)

您可以在列前添加逗号,并将其与特殊银行进行比较:

SELECT  * 
FROM    tblnecklaces
WHERE   ',' + replace(nsubcat,', ','') + ',' LIKE ',bank special,'

我输入了一个替换来删除逗号后面的可选空格,因为你的例子有一个。

答案 2 :(得分:1)

未经测试但此RegExp应该有效(LIKE也有效,但会匹配以相同短语开头或结尾的项目):

SELECT * FROM tblnecklaces WHERE nsubcat REGEXP '(^|, )bank special($|,)';