Оператор MySQL LIKE для поиска подстроки в любом месте, кроме начала строки - PullRequest
12 голосов
/ 17 декабря 2009

У меня SQL-запрос SELECT * FROM table WHERE column LIKE '%pdd%'.

Проблема в том, что мне нужно получить все результаты, кроме тех, которые начинаются с «pdd», под которыми я подразумеваю поиск всего, где «pdd» находится не в начале. Как это можно сделать?

Мне нужно сопоставить «pdd», когда оно не в начале столбца.

Ответы [ 4 ]

22 голосов
/ 17 декабря 2009

Я предполагаю, что вы имеете в виду все строки, которые соответствуют "pdd", кроме тех, где "pdd" находится в начале.

SELECT * FROM table WHERE column LIKE '_%pdd%'.

Подстановочный знак "_" в предикатах LIKE означает "один из любых символов", эквивалентный "." в регулярных выражениях.

5 голосов
/ 17 декабря 2009

Если я правильно понимаю ваше требование, то вам нужно:

SELECT * FROM table WHERE column LIKE '%pdd_%' and column NOT LIKE 'pdd_%'
4 голосов
/ 17 декабря 2009
SELECT * FROM table WHERE column LIKE '%pdd%' AND column NOT LIKE 'pdd%'

Вы можете оптимизировать запрос в зависимости от того, как часто эти случаи встречаются в вашей таблице.

0 голосов
/ 17 декабря 2009

Попробуйте:

SELECT * FROM table WHERE column NOT LIKE 'pdd%'
...