В MySQL, LIKE
операторът извършва съпоставяне на шаблон, използвайки SQL шаблон.
Ако низът съвпада с предоставения шаблон, резултатът е 1
, в противен случай е 0
.
Моделът не е задължително да е буквален низ. Тази функция може да се използва с низови изрази и колони на таблицата.
Синтаксис
Синтаксисът е така:
израз. LIKE потупване [ESCAPE 'escape_char']
Където expr
е входният низ и pat
е моделът, срещу който тествате низа.
Незадължителният ESCAPE
клаузата ви позволява да зададете escape символ. Ескпиращият символ по подразбиране е \
, така че можете да пропуснете тази клауза, ако не е необходимо да я променяте.
Пример 1 – Основна употреба
Ето пример за това как да използвате този оператор в SELECT
изявление:
ИЗБЕРЕТЕ 'Charlie' КАТО 'Char%';
Резултат:
+-----------------------+| 'Чарли' КАТО 'Char%' |+------------------------+| 1 |+------------------------+
В този случай връщаната стойност е 1
което означава, че входният низ съответства на шаблона. По-специално, ние уточнихме, че входният низ трябва да започва с Char и да завърши с каквото и да било. %
символът съответства на произволен брой знаци (включително нула знака).
Ето какво се случва, ако пуснем %
:
ИЗБЕРЕТЕ 'Charlie' КАТО 'Char';
Резултат:
<пред>+-----------------------+| 'Чарли' КАТО 'Чар' |+-----------------------+| 0 |+-----------------------+
Връщаният резултат е 0
което означава, че няма съвпадение. Това е така, защото не използвахме заместващ знак, за да посочим други знаци.
Пример 2 – _
Заместващ знак
Също така имаме възможност да използваме _
заместващ знак, за да посочите само един знак. Ето един пример:
ИЗБЕРЕТЕ 'Charlie' КАТО 'Ch_rlie';
Резултат:
+-------------------------+| 'Чарли' КАТО 'Ch_rlie' |+--------------------------+| 1 |+-------------------------+
Двата заместващи знака могат да бъдат комбинирани в шаблон, ако е необходимо:
ИЗБЕРЕТЕ 'Чарли харесва понички' КАТО 'Ch_rlie%' КАТО 'Резултат';
Резултат:
<пред>+--------+| Резултат |+--------+| 1 |+-------+Ето още няколко:
ИЗБЕРЕТЕ 'Чарли харесва понички' КАТО 'Ch_rlie%donuts' КАТО 'Резултат 1', 'Чарли харесва понички' КАТО 'Ch_rlie%nuts' КАТО 'Резултат 2', 'Чарли харесва понички' КАТО %C. %' КАТО 'Резултат 3', 'Чарли харесва понички' КАТО '% харесва %' КАТО 'Резултат 4';
Резултат:
+----------+-----------+---------+----------+| Резултат 1 | Резултат 2 | Резултат 3 | Резултат 4 |+----------+----------+----------+---------+| 1 | 1 | 1 | 1 |+---------+-----------+---------+----------+
Нека направим някои промени в този пример, за да можем да видим някои примери за това кога не съвпадат:
ИЗБЕРЕТЕ 'Чарли харесва понички' КАТО 'Ch%rlie_donuts' КАТО 'Резултат 1', 'Чарли харесва понички' КАТО 'Charlie_nuts' КАТО 'Резултат 2', 'Чарли харесва понички' КАТО 'Charlie likes КАТО Reult' 3', 'Чарли харесва понички' КАТО '_ харесва _' КАТО 'Резултат 4';
Резултат:
+----------+-----------+---------+----------+| Резултат 1 | Резултат 2 | Резултат 3 | Резултат 4 |+----------+----------+----------+---------+| 0 | 0 | 0 | 0 |+----------+-----------+---------+----------+
Пример 3 – Пример за база данни
LIKE
операторът често се използва в WHERE
клауза на SELECT
изявление при запитване към база данни. Когато се използва по този начин, той стеснява резултатите до само онези записи, които съвпадат, но виждаме действителните резултати (не само 1
или 0
).
Ето пример за това как можем да използваме този оператор в заявка към база данни:
ИЗБЕРЕТЕ ArtistId, ArtistNameFROM ArtistsWHERE ArtistName LIKE 'B%';
Резултат:
+---------+----------------+| ArtistId | Име на изпълнител |+----------+----------------+| 4 | Бъди Рич || 11 | Black Sabbath || 15 | Птиците от Токио || 16 | Bodyjar |+---------+----------------+
В този случай това беше проста заявка, която връща всички изпълнители, чиито имена започват с буквата B .
Ето пълния списък с изпълнители в тази таблица:
ИЗБЕРЕТЕ ArtistId, ArtistNameFROM Artists;
Резултат:
+---------+-----------------------+| ArtistId | Име на изпълнител |+----------+-----------------------+| 1 | Iron Maiden || 2 | AC/DC || 3 | Алън Холдсуърт || 4 | Бъди Рич || 5 | Девин Таунсенд || 6 | Джим Рийвс || 7 | Том Джоунс || 8 | Maroon 5 || 9 | Сценарият || 10 | Свети || 11 | Black Sabbath || 12 | Майкъл се научава да рок || 13 | Карабао || 14 | Karnivool || 15 | Птиците от Токио || 16 | Bodyjar |+---------+-----------------------+
Пример 4 – Бягство с обратна наклонена черта
Какво се случва, ако един от заместващите знаци е във вашия входен низ и трябва да извършите съвпадение с него? Можете да го екранирате с обратна наклонена черта (\
). Ето пример за такова търсене със и без escape символа:
ИЗБЕРЕТЕ 'usr_123' КАТО 'usr_123' КАТО 'Без escape', 'usr_123' КАТО 'usr\_123' КАТО 'С escape';
Резултат:
+----------------+------------+| Без бягство | С бягство |+----------------+------------+| 1 | 1 |+----------------+------------+
В този случай и двамата съвпадаха, но по различни причини. Първият ред съответства, защото заместващият знак указва, че всеки знак ще съвпада. Вторият ред също съвпада, но само защото във входния низ случайно има долно черта на правилното място.
Нека леко променим входния низ, така че да получим различен резултат:
ИЗБЕРЕТЕ 'usr+123' КАТО 'usr_123' КАТО 'Без escape', 'usr+123' КАТО 'usr\_123' КАТО 'С escape';
Резултат:
+----------------+------------+| Без бягство | С бягство |+----------------+------------+| 1 | 0 |+----------------+------------+
Неекранираната версия се върна положително, защото заместващият знак означаваше, че можем да имаме всеки герой на това място. Екранираната версия изрично посочва, че само символът за долна черта (_
) ще съвпада. Входящият низ нямаше знак за долна черта на това място и така резултатът беше отрицателен.
Пример 5 – ESCAPE
Клауза
Можете също да използвате ESCAPE
клауза, за да посочите свой собствен персонализиран екраниращ символ. Ето един пример:
ИЗБЕРЕТЕ 'usr_123' КАТО 'usr|_123' ESCAPE '|' КАТО 'Низ 1', 'usr+123' КАТО 'usr|_123' ESCAPE '|' КАТО 'Низ 2';
Резултат:
+----------+----------+| Низ 1 | Низ 2 |+----------+---------+| 1 | 0 |+---------+----------+
Пример 6 – Числови изрази
Реализацията на MySQL на LIKE
оператор позволява използването на числови изрази. Ето един пример:
ИЗБЕРЕТЕ 1234 КАТО '12%', 1234 КАТО '12_';
Резултат:
+-----------------+----------------+| 1234 КАТО '12%' | 1234 КАТО '12_' |+-----------------+----------------+| 1 | 0 |+-----------------+----------------+