Разница между подобным и регулярным оператором
Сейчас я изучаю MySQL. Мне нужна ваша помощь в понимании разницы между этими запросами:
select id from tab where id like '000';
select id from tab where id regex '000';
Ответы
Ответ 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.