разница между как и регулярное выражение - PullRequest
12 голосов
/ 02 ноября 2010

Я изучаю MySQL сейчас. Мне нужна ваша помощь в понимании разницы между этими запросами:

select id from tab where id like '000';

select id from tab where id regex '000';

Ответы [ 3 ]

12 голосов
/ 02 ноября 2010

Ваш первый запрос использует оператор like, но не использует подстановочные знаки.Так что это эквивалентно:

select id from tab where id = '000';

, в котором перечислены только те id, где id равно 000.

Во втором запросе используется оператор regex, и в нем перечислены строкигде id содержит 000 где угодно .

Пример: В нем будут перечислены id: 1000, 2000, 000, 0001

Чтобы ваш первый запрос вел себя как второй, вам придется использовать подстановочный знак %, который соответствует нулю или более символов:

select id from tab where id like '%000%';

Чтобы ваш второй запрос вел себя как кулак, вам нужно использовать начальный якорь (^) и конечный якорь ($):

select id from tab where id regex '^000$';
3 голосов
/ 02 ноября 2010

На всякий случай вы имели в виду первое утверждение:

select id from tab where id like '%000%';

Это означает: что-нибудь (или ничего), затем «000», затем что-нибудь (или ничего).

Это как раз то, что делает id regex '000'.

По сути, LIKE выполняет очень простые подстановочные совпадения, а REGEX допускает очень сложные подстановочные совпадения.

ФактическиРегулярные выражения (REGEX) настолько способны, что [1] сами по себе изучают [2] простой способ введения очень тонких ошибок.Веселитесь.

1 голос
/ 02 ноября 2010

Оператор like позволяет задавать символы подстановки с помощью оператора % .

Если, например, вам нужно указать все слова, начинающиеся с символа a , вы можете сделать это, используя значение "a%" . Вы также можете указать слова , заканчивающиеся строкой символов. Например. слова, заканчивающиеся на ing , могут быть указаны с помощью "% ing"

Вы также можете иметь параметры, определяющие столбцы, содержащие значения, которые содержат определенную строку. Например. слова, содержащие символы fish , можно указать с помощью параметра like "% fish%"

Regexp (я не думаю, что есть оператор регулярного выражения), с другой стороны, позволяет вам задавать регулярное выражение при сравнении значений в столбце с параметром. Например, если вам нужно извлечь все записи, которые соответствуют телефонному номеру в формате 555-666-7777, вы можете использовать параметр "[[: digit:]] {3} \ - [[: digit:] ] {3} \ - [[: цифры:]] {4} "

например. ВЫБРАТЬ * ИЗ телефонной книги ГДЕ телефон REGEXP "[[: digit:]] {3} \ - [[: digit:]] {3} \ - [[: digit:]] {4}"

Для получения дополнительной информации об операторе REGEXP см. http://dev.mysql.com/doc/refman/5.1/en/regexp.html.

...