Строковые функции в 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 '{искомая буква}%'. Так же затронем как можно оптимизировать выборку по алфавиту, если у вас большая база.