Подтвердить что ты не робот

Разница между подобным и регулярным оператором

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

select id from tab where id like '000';

select id from tab where id regex '000';
4b9b3361

Ответ 1

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

select id from tab where id = '000';

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

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

Пример: Он отобразит эти id 's: 1000, 2000, 000, 0001

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

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

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

select id from tab where id regex '^000$';

Ответ 2

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

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

Это означает: ничего (или ничего), за которым следует "000", за которым следует что-либо (или ничего).

Это просто то, что делает id regex '000'.

В принципе, LIKE выполняет очень простые подстановочные знаки, а REGEX способен к очень сложным сопоставлениям подстановочных знаков.

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

Ответ 3

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

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

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

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

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

Подробнее об операторе REGEXP см. http://dev.mysql.com/doc/refman/5.1/en/regexp.html.