Spec-Zone .ru
спецификации, руководства, описания, API

3.3.4.7. Сопоставление с образцом

MySQL обеспечивает стандартное сопоставление с образцом SQL так же как форму сопоставления с образцом, основанного на расширенных регулярных выражениях, подобных используемым утилитами Unix, такими как vi, grep, и sed.

Сопоставление с образцом SQL позволяет Вам использовать"_"чтобы соответствовать любой единственный символ и"%"чтобы соответствовать произвольное число символов (включая нулевые символы). В MySQL образцы SQL являются нечувствительными к регистру по умолчанию. Некоторые примеры показывают здесь. Вы не используете = или <> когда Вы используете образцы SQL; используйте LIKE или NOT LIKE операторы сравнения вместо этого.

Счесть имена начинающимися"b":

mysql> SELECT * FROM pet WHERE name LIKE 'b%';+--------+--------+---------+------+------------+------------+| name   | owner  | species | sex  | birth      | death      |+--------+--------+---------+------+------------+------------+| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       || Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |+--------+--------+---------+------+------------+------------+

Найти имена, заканчивающиеся"fy":

mysql> SELECT * FROM pet WHERE name LIKE
        '%fy';+--------+--------+---------+------+------------+-------+| name   | owner  | species | sex  | birth      | death |+--------+--------+---------+------+------------+-------+| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  || Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |+--------+--------+---------+------+------------+-------+

Найти имена, содержащие"w":

mysql> SELECT * FROM pet WHERE name LIKE
        '%w%';+----------+-------+---------+------+------------+------------+| name     | owner | species | sex  | birth      | death      |+----------+-------+---------+------+------------+------------+| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       || Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 || Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |+----------+-------+---------+------+------------+------------+

Чтобы найти имена, содержащие точно пять символов, используйте пять экземпляров"_"символ образца:

mysql> SELECT * FROM pet WHERE name LIKE
        '_____';+-------+--------+---------+------+------------+-------+| name  | owner  | species | sex  | birth      | death |+-------+--------+---------+------+------------+-------+| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  || Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |+-------+--------+---------+------+------------+-------+

Другой тип сопоставления с образцом, обеспеченного MySQL, использует расширенные регулярные выражения. Когда Вы тестируете на достойный этого типа образца, используйте REGEXP и NOT REGEXP операторы (или RLIKE и NOT RLIKE, которые являются синонимами).

Следующий список описывает некоторые характеристики расширенных регулярных выражений:

Демонстрировать, как расширенные регулярные выражения работают, LIKE запросы, показанные ранее, переписываются здесь, чтобы использовать REGEXP.

Счесть имена начинающимися"b", используйте"^"чтобы соответствовать начало имени:

mysql> SELECT * FROM pet WHERE name REGEXP
        '^b';+--------+--------+---------+------+------------+------------+| name   | owner  | species | sex  | birth      | death      |+--------+--------+---------+------+------------+------------+| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       || Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |+--------+--------+---------+------+------------+------------+

Если Вы действительно хотите вызвать a REGEXP сравнение, чтобы быть чувствительными к регистру, используйте BINARY ключевое слово, чтобы сделать одну из строк двоичной строкой. Этот запрос соответствует только нижний регистр"b"в начале имени:

mysql> SELECT * FROM pet WHERE name REGEXP BINARY
        '^b';

Найти имена, заканчивающиеся"fy", используйте"$"чтобы соответствовать конец имени:

mysql> SELECT * FROM pet WHERE name REGEXP
        'fy$';+--------+--------+---------+------+------------+-------+| name   | owner  | species | sex  | birth      | death |+--------+--------+---------+------+------------+-------+| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  || Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |+--------+--------+---------+------+------------+-------+

Найти имена, содержащие"w", используйте этот запрос:

mysql> SELECT * FROM pet WHERE name REGEXP
        'w';+----------+-------+---------+------+------------+------------+| name     | owner | species | sex  | birth      | death      |+----------+-------+---------+------+------------+------------+| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       || Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 || Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |+----------+-------+---------+------+------------+------------+

Поскольку образец регулярного выражения соответствует, если он происходит где-нибудь в значении, не необходимо в предыдущем запросе поместить подстановочный знак по обе стороны от образца, чтобы добраться, это, чтобы соответствовать все значение как это было бы, если бы Вы использовали образец SQL.

Чтобы найти имена, содержащие точно пять символов, используйте"^"и"$"чтобы соответствовать начало и конец имени, и пять экземпляров"."промежуточный:

mysql> SELECT * FROM pet WHERE name REGEXP
        '^.....$';+-------+--------+---------+------+------------+-------+| name  | owner  | species | sex  | birth      | death |+-------+--------+---------+------+------------+-------+| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  || Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |+-------+--------+---------+------+------------+-------+

Вы могли также записать предыдущий запрос, используя {n} ("повторяются -n- времена") оператор:

mysql> SELECT * FROM pet WHERE name REGEXP
        '^.{5}$';+-------+--------+---------+------+------------+-------+| name  | owner  | species | sex  | birth      | death |+-------+--------+---------+------+------------+-------+| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  || Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |+-------+--------+---------+------+------------+-------+

Раздел 12.5.2, "Регулярные выражения", предоставляет больше информации о синтаксисе для регулярных выражений.