Поиск по образцу с помощью шаблонов SQL

Задача
Вы хотите выполнить поиск по образцу, а не буквальное сравнение.

Решение
Используйте оператор LIKE и шаблон SQL, описанный в данном разделе. Или
воспользуйтесь регулярными выражениями, описанными в рецепте 4.7.

Обсуждение
Шаблоны – это строки, содержащие специальные символы. Специальные символы также называют метасимволами, так как они означают нечто отличное от самих себя. MySQL поддерживает два вида поиска по образцу.
В одном из них используются шаблоны SQL, а в другом – регулярные выражения. Шаблоны SQL универсальнее при переходе от одной СУБД к другой, но регулярные выражения являются более мощным средством. Эти два вида поиска по образцу используют различные операторы и различные наборы метасимволов. В данном разделе мы поговорим о шаблонах SQL.
При поиске по шаблону SQL для сравнения строк с образцом используются операторы LIKE и NOT LIKE вместо = и !=. Шаблон может содержать два специальных метасимвола:

_ (подчеркивание) соответствует любому отдельному символу, а % (знак процента) – любой последовательности символов, включая пустую строку. Вы можете использовать эти символы для создания разнообразных шаблонов:

• Строки, начинающиеся с определенной подстроки:

mysql> SELECT name FROM metal WHERE name LIKE 'co%';

+-------- +
| name |
+ --------+
| copper |
+ --------+

• Строки, заканчивающиеся определенной подстрокой: mysql> SELECT name FROM metal WHERE name LIKE '%er';

+--------- +
| name |
+--------- +
| copper |
| silver |
+--------- +

• Строки, содержащие (в любом месте) определенную подстроку:

mysql> SELECT name FROM metal WHERE name LIKE '%er%';

+---------- +
| name |
+ ----------+
| copper |
| mercury |
| silver |
+ ---------+

• Строки, содержащие определенную подстроку, которая начинается с указанной позиции (с шаблоном совпадут только те строки, в которых pp присутствует и начинается с третьей позиции столбца name):

mysql> SELECT name FROM metal WHERE name LIKE '__pp%';
+ -------- +
| name |
+ --------+
| copper |
+-------- +

Совпадение с шаблоном SQL достигается, только если ему соответствует все сравниваемое значение целиком.


То есть из двух приведенных ниже сравнений успешно выполнится только второе:

'abc' LIKE 'b'
'abc' LIKE '%b%'

Чтобы изменить условие поиска на обратное, используйте оператор NOT LIKE.
Следующий запрос находит строки, которые не содержат символов i:

mysql> SELECT name FROM metal WHERE name NOT LIKE '%i%';

+---------- +
| name |
+ ----------+
| copper |
| gold |
| lead |
| mercury |
+ ----------+

Шаблоны SQL не соответствуют значениям NULL (это относится и к LIKE, и к NOT LIKE):

mysql> SELECT NULL LIKE '%', NULL NOT LIKE '%';

+----------------- +----------------------- +
| NULL LIKE '%' | NULL NOT LIKE '%' |
+----------------- + -----------------------+
| NULL | NULL |
+ -----------------+----------------------- +

В некоторых случаях поиск по образцу эквивалентен поиску подстроки. На пример, использование шаблонов для поиска строк, находящихся с одного или другого конца строки (табл.


4.2), подобно использованию LEFT() или RIGHT():

Таблица 4.2. Аналогичные операции
+------------------------+-------------------------+
| Поиск по образцу | Поиск подстроки |
+------------------------+-------------------------+
| str LIKE 'abc%' | LEFT(str,3) = 'abc' |
| str LIKE '%abc' | RIGHT(str,3) = 'abc' |
+------------------------+--------------------------+.



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
FULLTEXT поиск и короткие слова
Буквальная интерпретация метасимволов в шаблонах
Включение и исключение слов из FULLTEXT - поиска
Поиск по образцу с помощью регулярных выражений
Поиск с помощью индекса FULLTEXT

Вернуться в раздел: MySQL / 4. Работа со строками