Мы создаем успех.

Строковые функции в MySql часть 2. Выборка по алфавиту.

Главная » Блог » Строковые функции в MySql часть 2. Выборка по алфавиту.

В прошлой статье мы разобрали 2 строковые функции ORD() и ASCII(), обратили внимание на их особенности, и как можно применять.

Сейчас хотелось в этой статье разобрать функцию LEFT(), и выражения вида LIKE '{искомая буква}%'.

Функция LEFT.


LEFT(str,len)

Возвращает крайние слева len символов из строки str, например:

mysql>  SELECT LEFT('Ищем нужную букву', 1);
+---------------------------------------------+
| LEFT('Ищем нужную букву', 1) |
+---------------------------------------------+
| И                                          |
+---------------------------------------------+
1 row in set (0.00 sec)

При выборке из базы данных запрос будет выглядеть так:

mysql> SELECT `name` FROM `engine_game` WHERE LEFT(`name`,1) LIKE 'г' LIMIT 15;
+-------------------------------------------------------+
| name                                                  |
+-------------------------------------------------------+
| Горький-18                                            |
| Гав! Два! Три!                                        |
| Гамлет                                                |
| Генератор кроссвордов                                 |
| Герои воздушных битв                                  |
| Герои Меча И Магии III: Возрождение Эрафии            |
| Герои Меча И Магии III: Дыхание Смерти                |
| Герои Меча И Магии III: Клинок Армагеддона            |
| Герои Меча И Магии IV                                 |
| Герои Меча И Магии IV. Вихри Войны                    |
| Герои Меча И Магии IV. Грядущая Буря                  |
| Герои Меча и Магии V                                  |
| Герои меча и магии V. Владыки севера.                 |
| Герои меча и магии V. Золотое издание.                |
| Герои меча и магии V. Повелители Орды.                |
+-------------------------------------------------------+
15 rows in set (0.00 sec)

Что мы сделали? Мы взяли 1 символ поля «name» и провели сравнение через оператор LIKE, на нужную нам букву. LIKE — это универсальный оператор, позволяющий производить поиск в строке, вне зависимости от его регистра.

Выражение вида LIKE '{искомая буква}%'


Как уже выше упоминалось, LIKE является универсальным оператором, для работы со строкой. Этот оператор позволяет искать в строке не только одну букву, но и любые вхождения. Для этого есть специальный символ %, который означает, что до искомой фразы (буквы или набора символов) или после, может быть любое количество любых символов.

В нашем случае, мы ищем только 1 букву, а значит наша конструкция будет выглядеть так:

mysql> SELECT `name` FROM `engine_game` WHERE `name` LIKE 'г%' LIMIT 15;
+-------------------------------------------------------+
| name                                                  |
+-------------------------------------------------------+
| Горький-18                                            |
| Гав! Два! Три!                                        |
| Гамлет                                                |
| Генератор кроссвордов                                 |
| Герои воздушных битв                                  |
| Герои Меча И Магии III: Возрождение Эрафии            |
| Герои Меча И Магии III: Дыхание Смерти                |
| Герои Меча И Магии III: Клинок Армагеддона            |
| Герои Меча И Магии IV                                 |
| Герои Меча И Магии IV. Вихри Войны                    |
| Герои Меча И Магии IV. Грядущая Буря                  |
| Герои Меча и Магии V                                  |
| Герои меча и магии V. Владыки севера.                 |
| Герои меча и магии V. Золотое издание.                |
| Герои меча и магии V. Повелители Орды.                |
+-------------------------------------------------------+
15 rows in set (0.00 sec)

В данном примере, запрос ищет все строки, у которых имя начинается с 1 буквы «г». Если бы мы создали запрос `name` LIKE '%г%', то скрипт искал бы все строки, в которых встречается буква «г» вне зависимости от ее расположения и регистра. Но так как мы % не поставили перед этой буквой, то поиск идет только для 1 буквы.

Итог

 
Эти 2 запроса выдают одинаковый результат, по-этому какой из вариантов использовать лучше, мы определим в следующей статье, где мы проведем тестирование скорости работы строковых функций ASCII(), ORD(),LEFT() и выражения вида LIKE '{искомая буква}%'. Так же затронем как можно оптимизировать выборку по алфавиту, если у вас большая база.