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

nbysray5  于 2023-05-05  发布在  Mysql
关注(0)|答案(3)|浏览(230)

我有一个MySQL选择语句的困境,这让我有点偏离了方向。在某个栏目中,我有一个类别术语。这个术语可能看起来像'category',或者它可能包含多个CSV,如下所示:'类别,银行专用'。
我需要检索所有包含逗号分隔值中的术语“bank special”的行。现在,我正在使用以下SQL语句:

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

现在这个工作正常,但如果我有如下类别:* *'diamond special'**例如,那么该行仍然被检索,因为我的列中的术语'special'似乎与我的REGEXP语句中的术语'bank special'匹配。
我如何检查整个短语“bank special”的存在,而不是部分匹配单词?
非常感谢您的时间和帮助。

rmbxnbpk

rmbxnbpk1#

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

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

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

vbkedwbf

vbkedwbf2#

您可以在该列前面加上逗号,并将其与银行特殊信息进行比较:

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

我在替换中删除逗号后面的可选空格,因为您的示例中有一个。

ep6jt1vc

ep6jt1vc3#

未测试,但此RegExp应该可以工作(LIKE也可以工作,但将匹配以相同短语开头或结尾的项目):

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

相关问题