我有一个MySQL select语句困境让我偏离了一点点。在某一列中,我有一个类别术语。此术语可能类似于“类别”,或者可能包含多个CSV,如下所示:“类别,银行特殊”。
我需要在逗号分隔值中检索包含术语“bank special”的所有行。目前我正在使用以下SQL语句:
SELECT * FROM tblnecklaces WHERE nsubcat REGEXP 'bank special';
现在这可行,但是如果我有以下类别:'钻石特殊',那么仍然会检索该行,因为我的列中的术语“特殊”似乎正在匹配在我的REGEXP声明中使用“银行特殊”一词。
我如何仅检查整个短语“银行特殊”的存在,而不是部分匹配这些词?
非常感谢您的时间和帮助
答案 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($|,)';