Spec-Zone .ru
спецификации, руководства, описания, API
|
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
, которые являются синонимами).
Следующий список описывает некоторые характеристики расширенных регулярных выражений:
".
"соответствия
любой единственный символ.
Символьный class"[...]
"соответствия любой символ в пределах скобок.
Например,"[abc]
"соответствия"a
", "b
",
или"c
".
Чтобы назвать диапазон символов, используйте тире."[a-z]
"соответствия любая буква, тогда как"[0-9]
"соответствия
любая цифра.
"*
"нуль
соответствий или больше экземпляров вещи, предшествующей этому. Например,"x*
"соответствия любое число"x
"символы",[0-9]*
"соответствия
любое число цифр, и".*
"соответствия
любое число чего-либо.
A REGEXP
соответствие образца успешно выполняется, если образец соответствует где-нибудь в протестированном
значении. (Это отличается от a LIKE
соответствие образца, которое успешно выполняется, только если
образец соответствует все значение.)
Чтобы привязать образец так, чтобы это соответствовало начало или конец
протестированного значения, используйте"^
"вначале или"$
"в конце образца.
Демонстрировать, как расширенные регулярные выражения работают, 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, "Регулярные выражения", предоставляет больше информации о синтаксисе для регулярных выражений.