SQL шаблони.
MySQL забезпечує стандартні шаблони SQL, засновані на розширених регулярних виразах, подібних до використовуваних Unix-додатків, на зразок vi, grep і sed.
SQL-шаблони дозволяють використовувати символ _, який відповідає будь-якому одиночному символу (але тільки одному!), або символ %, який відповідає довільному числу символів (включаючи нульову кількість). У MySQL SQL-шаблони за умовчанням нечутливі до регістру. Деякі приклади наведені нижче. Зауважте, що ви не використовуєте = або !=, коли застосовуєте зразки SQL; використовуйте замість них оператори порівняння LIKE чи NOT LIKE.
Щоб знайти імена, що починаються з літери b, введіть:
Щоб знайти імена, що закінчуються поєднанням fy, введіть:
Щоб знайти імена, що містять літеру w, введіть:
Щоб знайти імена, що складаються з п'яти символів, використовуйте набір символів _:
Інший тип зразка, що підтримується MySQL, це розширені регулярні вирази. Коли ви перевіряєте відповідності для цього типу зразка, використовуйте оператори REGEXP та NOT REGEXP (або RLIKE та NOT RLIKE, які є синонімами) замість вже знайомих LIKE та NOT LIKE. Деякі правила завдання розширених регулярних виразів:
- точка (.) відповідає будь-якому одиночному символу;
- символьний клас є набором символів, який обробляється при порівнянні як один символ. Символьний клас [. ] відповідає будь-якому символу всередині дужок. Наприклад, [abc] відповідає а або b або с. Щоб встановити діапазон символів, використовуйте рисунок. Наприклад, [a-z] відповідає будь-якому латинському символу нижнього регістру, тоді як [0-9] визначає будь-яку цифру;
- зірочка відповідає нулю або більшій кількості зразків, що передують їй. Наприклад, х*відповідає будь-якій кількості символів х, [0-9]* відповідає будь-якій кількості цифр, а.* відповідає будь-якій кількості чогось;
- регулярні вирази чутливі до регістру, але ви можете використовувати такий символьний клас, щоб він відповідав обом регістрам відразу. Наприклад, [аА] відповідає символу нижнього або верхнього регістру, a [a-zA-Z] відповідає будь-якому латинському символу;
- зразок MySQL вважається відповідним, якщо відповідність відбувається де-небудь у значенні, що перевіряється. Класичний SQL враховує відповідність, лише якщо вона задовольняє всьому значенню загалом;
- щоб закріплювати зразок так, щоб він відповідав строго початку або кінцю значення, що перевіряється, використовується символ циркумфлексу (^) на початку або долара ($) в кінці зразка.
Щоб проілюструвати, як виконується робота регулярних виразів, наведених вище, запитиLIKE перероблені нижче так, щоб використовувати їх зREGEXP.
Щоб знайти імена, що починаються на b, застосуйте ^ для початку імені:
До MySQL версії 3.23.4REGEXP чутливий до регістру, і попередній запит не поверне жодних рядків. Щоб відповідати нижньому або верхньому регістру b, використовуйте замість цього запит:
mysql> SELECT * FROM pet WHERE паші REGEXP "^[bВ]";
У MySQL 3.23.4, щоб змусити порівнянняREGEXP стати чутливим до регістру, використовують ключове слово BINARY, щоб зробити один із рядків двійковим (у цьому випадку MySQL починає порівнювати рядки з урахуванням регістру посимвольно). Цей запит буде відповідати тільки нижньому регістру букви b на початку імені:
mysql> SELECT * FROM pet WHERE name REGEXP BINARY "^b";
Щоб знаходити імена, що закінчуються на fy,застосуйте $ для відповідності кінцю імені:
Щоб знаходити імена, що містять w, не має значення в якому регістрі, використовуйте цей запит:
Тому що регулярне вираз спрацьовує, якщо відповідність відбувається десь у значенні, у попередньому запиті необов'язково розміщувати груповий символ з обох сторін зразка, щоб відповідати всьому значенню. Хоча саме так довелося б зробити в стандартному SQL.
Щоб знайти імена, що містять п'ять символів, використовуйте ^ і $, щоб відповідати початку, кінцю імені та п'яти зразкам точки . між ними:
Ви також можете переписати попередній запит, використовуючи ще одну хитрість. Якщо після зразка символу для відповідності поставити число n у фігурних дужках, зразок буде повторений п раз: