MySQL соответствует существованию термина среди значений, разделенных запятыми, используя REGEXP - PullRequest
0 голосов
/ 21 октября 2010

У меня есть дилемма оператора выбора MySQL, которая немного сбила меня с курса. В определенном столбце у меня есть термин категории. Этот термин может выглядеть примерно так: « категория » или может содержать несколько CSV, например: « категория, специальный банк ».

Мне нужно получить все строки, содержащие термин «специальный банк» в значении через запятую. В настоящее время я использую следующий оператор SQL:

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

Теперь это работает нормально, но если бы у меня была категория, например: 'diamond special', например, строка все равно была получена, потому что термин ' special ' в моем столбце, кажется, соответствует термин " специальный банк " в моем отчете REGEXP.

Как бы я пошел, проверяя существование всей фразы ' Bank Special ' и не частично совпадающей со словами?

Большое спасибо за ваше время и помощь

Ответы [ 3 ]

1 голос
/ 21 октября 2010

Вы можете добавить префикс в столбец к запятой и сравнить его со специальным банком:

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

Я вставил замену, чтобы удалить дополнительный пробел после запятой, потому что в вашем примере он есть.

1 голос
/ 21 октября 2010

Не проверено, но этот RegExp должен работать (LIKE тоже работает, но будет соответствовать элементам, которые начинаются или заканчиваются одной и той же фразой):

SELECT * FROM tblnecklaces WHERE nsubcat REGEXP '(^|, )bank special($|,)';
1 голос
/ 21 октября 2010

Самое простое решение - использовать предложение LIKE (% - подстановочный знак):

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

Обратите внимание, что LIKE также намного быстрее, чем REGEXP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...