При работе с базой данных SQL вам может понадобиться найти записи, содержащие определенные строки. В этой статье мы разберем, как искать строки и подстроки в MySQL и SQL Server.
Содержание
- Использование операторов WHERE и LIKE для поиска подстроки
- Поиск подстроки в SQL Server с помощью функции CHARINDEX
- Поиск подстроки в SQL Server с помощью функции PATINDEX
- MySQL-запрос для поиска подстроки с применением функции SUBSTRING_INDEX()
Я буду использовать таблицу products_data
в базе данных products_schema
. Выполнение команды SELECT * FROM products_data
покажет мне все записи в таблице:
Поскольку я также буду показывать поиск подстроки в SQL Server, у меня есть таблица products_data
в базе данных products
:
Поиск подстроки при помощи операторов WHERE и LIKE
Оператор WHERE позволяет получить только те записи, которые удовлетворяют определенному условию. А оператор LIKE позволяет найти определенный шаблон в столбце. Эти два оператора можно комбинировать для поиска строки или подстроки.
Например, объединив WHERE с LIKE, я смог получить все товары, в которых есть слово «computer»:
SELECT * FROM products_data WHERE product_name LIKE '%computer%'
Знаки процента слева и справа от «computer» указывают искать слово «computer» в конце, середине или начале строки.
Если поставить знак процента в начале подстроки, по которой вы ищете, это будет указанием найти такую подстроку, стоящую в конце строки. Например, выполнив следующий запрос, я получил все продукты, которые заканчиваются на «er»:
SELECT * FROM products_data WHERE product_name LIKE '%er'
А если написать знак процента после искомой подстроки, это будет означать, что нужно найти такую подстроку, стоящую в начале строки. Например, я смог получить продукт, начинающийся на «lap», выполнив следующий запрос:
SELECT * FROM products_data WHERE product_name LIKE 'lap%'
Этот метод также отлично работает в SQL Server:
Поиск подстроки в SQL Server с помощью функции CHARINDEX
CHARINDEX() — это функция SQL Server для поиска индекса подстроки в строке.
Функция CHARINDEX() принимает 3 аргумента: подстроку, строку и стартовую позицию для поиска. Синтаксис выглядит следующим образом:
CHARINDEX(substring, string, start_position)
Если функция находит совпадение, она возвращает индекс, по которому найдено совпадение, а если совпадение не найдено, возвращает 0. В отличие от многих других языков, отсчет в SQL начинается с единицы.
Пример:
SELECT CHARINDEX('free', 'free is the watchword of freeCodeCamp') position;
Как видите, слово «free» было найдено на позиции 1. Это потому, что на позиции 1 стоит его первая буква — «f»:
Можно задать поиск с конкретной позиции. Например, если указать в качестве позиции 25, SQL Server найдет совпадение, начиная с текста «freeCodeCamp»:
SELECT CHARINDEX('free', 'free is the watchword of freeCodeCamp', 25);
При помощи CHARINDEX можно найти все продукты, в которых есть слово «computer», выполнив этот запрос:
SELECT * FROM products_data WHERE CHARINDEX('computer', product_name, 0) > 0
Этот запрос диктует следующее: «Начиная с индекса 0 и до тех пор, пока их больше 0, ищи все продукты, названия которых содержат слово «computer», в столбце product_name». Вот результат:
Поиск подстроки в SQL Server с помощью функции PATINDEX
PATINDEX означает «pattern index», т. е. «индекс шаблона». Эта функция позволяет искать подстроку с помощью регулярных выражений.
PATINDEX принимает два аргумента: шаблон и строку. Синтаксис выглядит следующим образом:
PATINDEX(pattern, string)
Если PATINDEX находит совпадение, он возвращает позицию этого совпадения. Если совпадение не найдено, возвращается 0. Вот пример:
SELECT PATINDEX('%ava%', 'JavaScript is a Jack of all trades');
Чтобы применить PATINDEX к таблице, я выполнил следующий запрос:
SELECT product_name, PATINDEX('%ann%', product_name) position FROM products_data
Но он только перечислил все товары и вернул индекс, под которым нашел совпадение:
Как видите, подстрока «ann» нашлась под индексом 3 продукта Scanner. Но скорее всего вы захотите, чтобы выводился только тот товар, в котором было найдено совпадение с шаблоном.
Чтобы обеспечить такое поведение, можно использовать операторы WHERE и LIKE:
SELECT product_name, PATINDEX('%ann%', product_name) position FROM products_data WHERE product_name LIKE '%ann%'
Теперь запрос возвращает то, что нужно.
MySQL-запрос для поиска строки с применением функции SUBSTRING_INDEX()
Помимо решений, которые я уже показал, MySQL имеет встроенную функцию SUBSTRING_INDEX(), с помощью которой можно найти часть строки.
Функция SUBSTRING_INDEX() принимает 3 обязательных аргумента: строку, разделитель и число. Числом обозначается количество вхождений разделителя.
Если вы укажете обязательные аргументы, функция SUBSTRING_INDEX() вернет подстроку до n-го разделителя, где n — указанное число вхождений разделителя. Вот пример:
SELECT SUBSTRING_INDEX("Learn on freeCodeCamp with me", "with", 1);
В этом запросе «Learn on freeCodeCamp with me» — это строка, «with» — разделитель, а 1 — количество вхождений разделителя. В этом случае запрос выдаст вам «Learn on freeCodeCamp»:
Количество вхождений разделителя может быть как положительным, так и отрицательным. Если это отрицательное число, то вы получите часть строки после указанного числа разделителей. Вот пример:
SELECT SUBSTRING_INDEX("Learn on freeCodeCamp with me", "with", -1);
От редакции Techrocks: также предлагаем почитать «Индексы и оптимизация MySQL-запросов».
Заключение
Из этой статьи вы узнали, как найти подстроку в строке в SQL, используя MySQL и SQL Server.
CHARINDEX() и PATINDEX() — это функции, с помощью которых можно найти подстроку в строке в SQL Server. Функция PATINDEX() является более мощной, так как позволяет использовать регулярные выражения.
Поскольку в MySQL нет CHARINDEX() и PATINDEX(), в первом примере мы рассмотрели, как найти подстроку в строке с помощью операторов WHERE и LIKE.
Перевод статьи «SQL Where Contains String – Substring Query Example».
If you’re working with a database, whether large or small, there might be occasions when you need to search for some entries containing strings.
In this article, I’ll show you how to locate strings and substrings in MySQL and SQL Server.
I‘ll be using a table I call products_data
in a products_schema
database. Running SELECT * FROM products_data
shows me all the entries in the table:
Since I’ll be showing you how to search for a string in SQL Server too, I have the products_data
table in a products
database:
What We’ll Cover
- How to Query for Strings in SQL with the
WHERE
Clause andLIKE
Operator - How to Query for Strings in SQL Server with the
CHARINDEX
Function - How to Query for Strings in SQL Server with the
PATINDEX
Function - How to Query for Strings in MySQL with the
SUBSTRING_INDEX()
Function - Conclusion
How to Query for Strings in SQL with the WHERE
Clause and LIKE
Operator
The WHERE
clause lets you get only the records that meet a particular condition. The LIKE
operator, on the other hand, lets you find a particular pattern in a column. You can combine these two to search for a string or a substring of a string.
I was able to get all the products that have the word “computer” in them by combining the WHERE
clause and LIKE
operator by running the query below:
SELECT * FROM products_data
WHERE product_name LIKE '%computer%'
The percentage sign before and after the word “computer” means, find the word “computer” whether it’s in the end, middle, or start.
So, if you put the percentage sign at the start of a substring you’re searching by, it means, find that substring at the end of a string. For Example, I got every product that ends with “er” by running this query:
SELECT * FROM products_data
WHERE product_name LIKE '%er'
And if it’s at the end of a string, it means, find that substring at the start of a string. For example, I was able to get the product that starts with “lap” with this query:
SELECT * FROM products_data
WHERE product_name LIKE 'lap%'
This method also works fine in SQL Server:
How to Query for Strings in SQL Server with the CHARINDEX
Function
CHARINDEX() is an SQL server function for finding the index of a substring in a string.
The CHARINDEX()
function takes 3 arguments – the substring, the string, and the starting position. The syntax looks like this:
CHARINDEX(substring, string, start_position)
If it finds a match, it returns the index where it finds the match, but if it doesn’t find a match, it returns 0. Unlike many other languages, counting in SQL is 1-based.
Here’s an example:
SELECT CHARINDEX('free', 'free is the watchword of freeCodeCamp') position;
You can see the word free was found in position 1. That’s because ‘f’ itself is at position 1:
If I specify 25 as the position, SQL Server would find a match starting from the “freeCodeCamp” text:
SELECT CHARINDEX('free', 'free is the watchword of freeCodeCamp', 25);
I was able to use the CHARINDEX
function to search for all products that have the word “computer” in them by running this query:
SELECT * FROM products_data WHERE CHARINDEX('computer', product_name, 0) > 0
That query is saying, start from index 0, as long as they’re more than 0, get me every product that has the word “computer” in them in the product_name
column. This is the result:
How to Query for Strings in SQL Server with the PATINDEX
Function
PATINDEX
stands for “pattern index”. So, with this function, you can search for a substring with regular expressions.
PATINDEX
takes two arguments – the pattern and the string. The syntax looks like this:
PATINDEX(pattern, string)
If PATINDEX
finds a match, it returns the position of that match. If it doesn’t find a match, it returns 0. Here’s an example:
SELECT PATINDEX('%ava%', 'JavaScript is a Jack of all trades');
To apply PATINDEX
to the example table, I ran this query:
SELECT product_name, PATINDEX('%ann%', product_name) position
FROM products_data
But it only listed every product and returned the index where it found the match:
You can see it found the word “ann” at index 3 of the product Scanner. On many occasions, you might not want this behavior because you would want it to show only the item matched.
I made it return only what gets matched by using the WHERE
clause and LIKE
operator:
SELECT product_name, PATINDEX('%ann%', product_name) position
FROM products_data
WHERE product_name LIKE '%ann%'
Now it’s behaving as you would want.
How to Query for Strings in MySQL with the SUBSTRING_INDEX()
Function
Apart from the solutions I’ve already shown you, MySQL has an inbuilt SUBSTRING_INDEX()
function with which you can find a part of a string.
The SUBSTRING_INDEX()
function takes 3 compulsory arguments – the string, the substring to search for, and a delimiter. The delimiter has to be a number.
When you specify the compulsory arguments, the SUBSTRING_INDEX()
function will get you every part of the string that occurs before the delimiter you specify. Here’s an example:
SELECT SUBSTRING_INDEX("Learn on freeCodeCamp with me", "with", 1);
In the query above, “Learn on freeCodeCamp with me” is the string, “with” is the substring and 1 is the delimiter. In this case, the query will get you “Learn on freeCodeCamp”:
The delimiter can also be a negative number. If it’s a negative number, it gets you each part of the string that occurs after the delimiter you specify. Here’s an example:
SELECT SUBSTRING_INDEX("Learn on freeCodeCamp with me", "with", -1);
Conclusion
This article showed you how to locate a substring in a string in SQL using both MySQL and SQL Server.
CHARINDEX()
and PATINDEX()
are the functions with which you can search for a substring in a string inside SQL Server. PATINDEX()
is more powerful because it lets you use regular expressions.
Since CHARINDEX()
and PATINDEX()
don’t exist in MySQL, the first example showed you how you can find a substring in a string with the WHERE
clause and LIKE
operator.
Thank you for reading!
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started
Как с помощью Mysql сделать поиск по вхождению в строке?
Вот есть пример, надо найти по полю [STR] вхождение “A”:
[0] [N]"TABL",[STR]"A,B,C"
[1] [N]"CATL",[STR]"B,C"
Вывод:
[0] [N]"TABL",[STR]"A,B,C"
cheops
19.4k29 золотых знаков46 серебряных знаков139 бронзовых знаков
задан 18 июл 2016 в 20:20
Denis KotlyarovDenis Kotlyarov
2,8563 золотых знака25 серебряных знаков53 бронзовых знака
2
Не очень понятно представление таблицы, если N
и STR
– это столбцы таблицы, то достаточно, как указано в комментариях, воспользоваться оператором LIKE
SELECT
*
FROM
tbl
WHERE
STR LIKE '%A%'
Если же [0] [N]"TABL",[STR]"A,B,C"
и [1] [N]"CATL",[STR]"B,C"
это строки по которым осуществляется поиск, то лучше воспользоваться регулярными выражениями, т.е. оператором RLIKE
SELECT
*
FROM
tbl
WHERE
name RLIKE "[STR].*A.*$"
ответ дан 23 июл 2016 в 5:39
cheopscheops
19.4k29 золотых знаков46 серебряных знаков139 бронзовых знаков
Извини, помог человек из комментариев, раз он не пишет то напишу я.
SELECT * FROM tbl WHERE STR LIKE '%A%'
ответ дан 23 июл 2016 в 17:41
Denis KotlyarovDenis Kotlyarov
2,8563 золотых знака25 серебряных знаков53 бронзовых знака
1
Здравствуйте, уважаемые читатели блога webcodius.ru. Сегодня я хотел бы поговорить о языке SQL, а в частности о функциях для обработки текста. Для создания и управления сайтом часто бывает не обязательно знание языка SQL. Системы управления контентом позволяют редактировать контент сайта без написания запросов. Но хотя бы поверхностное знакомство с структурированным языком запросов поможет вам значительно ускорить модификацию и управление данными в базе данных вашего сайта.
Передо мной частенько возникают задачи: удалить часть текста из текстовых полей базы данных, объединить строковые данные или еще что-нибудь связанное с текстом. Делать все это через админские панели сайтов очень неудобно и муторно. Гораздо проще бывает написать запрос к базе данных выполняющий все эти действия за пару секунд.
Итак, начнем…
Символьные функции в языке sql
Начнем по порядку с самого простого. Первой рассмотрим строковую функцию ASCII, которая используется для определения ASCII-кода текстовых символов:
integer ASCII(str string)
Функция возвращает целое значение — ASCII-код первого левого символа строки str. В случае если строка str пустая возвращает 0 и NULL если строка str не существует.
Пример:
SELECT ASCII (‘t’);
Результат: 116
SELECT ASCII (‘test’);
Результат: 116
SELECT ASCII (1);
Результат: 49
Далее функция ORD, которая также определяет ASCII- код символов, но может обрабатывать также многобайтовые символы:
integer ORD(str string)
Если первый левый символ строки str многобайтовый, то возвращает его код в формате: ((первый байт ASCII- код)*256+(второй байт ASCII -код))[*256+третий байт ASCII -код…]. В случае если первый левый символ строки str не является многобайтовым, работает как функция ASCII — возвращает его ASCII-код.
Пример:
SELECT ORD (‘test’);
Результат: 116
Функция CHAR, тесно связанная с функцией ASCII и выполняет обратное действие:
string CHAR(int integer, …)
Функция CHAR возвращает строку символов по их ASCII-кодам. Если среди значений встречается значение NULL, то оно пропускается.
Пример:
SELECT CHAR ( 116, ‘101’, 115, ‘116’ );
Результат: ‘test’
SQL функции для объединения строк
Одна из самых популярных категорий функций. Ведь частенько бывает нужно объединить значения нескольких полей таблиц базы данных сайта. В языке SQL есть сразу несколько функций для конкатенации строк.
Функция CONCAT:
string CONCAT(str1 string, str2 string,…)
Функция возвращает строку, созданную путем объединения аргументов. Можно указывать более двух аргументов. Если один из аргументов является NULL, то и возвращаемый результат будет NULL. Числовые значения преобразуются в строку.
Пример:
SELECT CONCAT (‘Hello’, ‘ ‘, ‘world’, ‘!’);
Результат: ‘Hello world!’
SELECT CONCAT (‘Hello’, NULL, ‘world’, ‘!’);
Результат: NULL
SELECT CONCAT (‘Число пи’, ‘=’, 3.14);
Результат: ‘Число пи=3.14’
Как видно из примеров, строки объединяются без разделителей. Для того чтобы разделить слова в первом примере в качестве аргумента приходится использовать пробел. Если бы слов было больше, то каждый раз вставлять пробелы было бы не очень удобно.
Для таких случаев существует функция CONCAT_WS:
string CONCAT_WS(separator string, str1 string, str2 string,…)
Функция объединяет строки как и функция CONCAT, но вставляет между аргументами разделитель separator. В случае если аргумент separator является NULL, то и результат будет NULL. Аргументы строки равные NULL пропускаются.
Пример:
SELECT CONCAT_WS (‘ ‘, ‘Иванов’, ‘Иван’, ‘Иванович’);
Результат: ‘Иванов Иван Иванович’
SELECT CONCAT_WS (NULL, ‘Иванов’, ‘Иван’, ‘Иванович’);
Результат: NULL
SELECT CONCAT_WS (‘ ‘, ‘Иванов’, NULL, ‘Иван’, ‘Иванович’);
Результат: ”Иванов Иван Иванович’
В случае объединения большого количества строк, которые необходимо отделять разделителем, функция CONCAT_WS гораздо удобнее функции CONCAT.
Иногда бывает необходимо удлинить строку до определенного количества символов за счет повторения какого-либо символа. Это тоже своего рода объединение строк. Для этого можно использовать функции LPAD и RPAD. Функции имеют следующий синтаксис:
string LPAD(str string, len integer, padstr string)
string RPAD(str string, len integer, padstr string)
Функция LPAD возвращает строку str дополненную слева строкой padstr до длины len. Функция RPAD выполняет тоже самое, только удлинение происходит с правой стороны.
Пример:
SELECT LPAD (‘test’, 10, ‘.’);
Результат: ……test
SELECT RPAD (‘test’, 10, ‘.’);
Результат: test……
В данных функциях необходимо обратить внимание на параметр len, который ограничивает количество выводимых символов. Поэтому если длина строки str будет больше чем параметр len, то строка будет обрезана:
SELECT LPAD (‘test’, 3, ‘.’);
Результат: tes
Определение длины строки в sql запросах
Для определения количества символов в строке в языке SQL отвечает функция LENGTH — длина строки:
integer LENGTH(str string)
Функция возвращает целое число равное количеству символов в строке str.
Пример:
SELECT LENGTH (‘test’);
Результат: 4
В случае использования многобайтовых кодировок функция LENGTH выдает не правильный результат. Например в случае если задана кодировка unicode, то запрос:
SELECT LENGTH (‘тест’);
вернет 8. Что, легко заметить, в два раза больше реального количества символов. В этом случае нужно использовать функцию CHAR_LENGTH:
integer CHAR_LENGTH(str string)
Функция также возвращает длину строки str и поддерживает многобайтовые символы.
Например:
SELECT CHAR_LENGTH (‘тест’);
Результат: 4
Поиск подстроки в строке средствами sql
Для вычисления позиции подстроки в строке в языке sql существует несколько функций. Первая, которую мы рассмотрим, функция POSITION:
integer POSITION(substr string IN str string)
Возвращает номер позиции первого вхождения подстроки substr в строке str и возвращает 0 если подстрока не найдена. Функция POSITION может работать с многобайтовыми символами.
Пример:
SELECT POSITION (‘cd’ IN ‘abcdcde’);
Результат: 3
SELECT POSITION (‘xy’ IN ‘abcdcde’);
Результат: 0
Следующая функция LOCATE позволяет начинать поиск подстроки с определенной позиции:
integer LOCATE(substr string, str string, pos integer)
Возвращает позицию первого вхождения подстроки substr в строке str, начиная с позиции pos. Если параметр pos не задан, то поиск осуществляется с начала строки. Если подстрока substr не найдена, то возвращает 0. Поддерживает многобайтовые символы.
Пример:
SELECT LOCATE (‘cd’, ‘abcdcdde’, 5);
Результат: 5
SELECT LOCATE (‘cd’, ‘abcdcdde’);
Результат: 3
Аналогом функций POSITION и LOCATE является функция INSTR:
integer INSTR(str string, substr string)
Также как и функции выше возвращает позицию первого вхождения подстроки substr в строке str. Единственное отличие от функций POSITION и LOCATE то, что аргументы поменяны местами.
Далее рассмотрим функции, которые помогают получить подстроку.
Первыми рассмотрим сразу две функции LEFT и RIGHT, которые похожи по своему действию:
string LEFT(str string, len integer)
string RIGHT(str string, len integer)
Функция LEFT возвращает len первых символов из строки str, а функция RIGHT столько же последних. Поддерживают многобайтовые символы.
Пример:
SELECT LEFT (‘Москва’, 3);
Результат: Мос
SELECT RIGHT (‘Москва’, 3);
Результат: ква
Далее рассмотрим одинаковые по итоговому результату функции SUBSTRING и MID:
string SUBSTRING(str string, pos integer, len integer)
string MID(str string, pos integer, len integer)
Функции позволяют получить подстроку строки str длиною len символов с позиции pos. В случае если параметр len не задан, то возвращается вся подстрока начиная с позиции pos.
Пример:
SELECT SUBSTRING (‘г. Москва — столица России’, 4, 6);
Результат: Москва
SELECT SUBSTRING (‘г. Москва — столица России’, 4);
Результат: Москва — столица России
Примеры с функцией MID не привожу, потому что результаты будут аналогичные.
Интересная функция SUBSTRING_INDEX:
string SUBSTRING_INDEX(str string, delim string, count integer)
Функция возвращает подстроку строки str, полученную путем удаления символов, идущих после разделителя delim, находящимся в позиции count. Параметр count может быть как положительным, так отрицательным. Если count положительный, то отсчет позиции разделителя будет вестись слева и удаляться будут символы находящиеся справа от разделителя. Если count отрицательный, то отсчет позиции разделителя ведется справа и удаляются символы находящиеся слева от разделителя. Возможно, описание получилось слишком запутанным, но на примерах станет понятней.
Пример:
SELECT SUBSTRING_INDEX (‘www.mysql.ru’, ‘.’, 1);
Результат: www
В данном примере функция находит, первое вхождения символа точки в строке «www.mysql.ru» и удаляет все символы, идущие после нее, включая сам разделитель.
SELECT SUBSTRING_INDEX (‘www.mysql.ru’, ‘.’, 2);
Результат: www.mysql
Здесь функция ищет второе вхождение точки, удаляет все символы справа от нее и возвращает получившуюся подстроку. И еще один пример с отрицательным значением параметра count:
SELECT SUBSTRING_INDEX (‘www.mysql.ru’, ‘.’, -2);
Результат: mysql.ru
В этом примере функция SUBSTRING_INDEX ищет вторую точку, отсчитывая позицию справа, удаляет символы слева от нее и выдает полученную подстроку.
Удаление пробелов из строки
Для удаления лишних пробелов из начала и конца строки в языке SQL есть три функции.
Функция LTRIM:
string LTRIM(str string)
Удаляет с начала строки str пробелы и возвращает результат.
Функция RTRIM:
string RTRIM(str string)
Также удаляет пробелы из строки str, только с конца. Обе функции поддерживают многобайтовые символы.
Пример:
SELECT LTRIM (‘ текст ‘);
Результат: ‘текст ‘
SELECT RTRIM (‘ текст ‘);
Результат: ‘ текст’
И третья функция TRIM позволяет сразу удалять пробелы из начала и из конца строки:
string TRIM([[BOTH | LEADING | TRAILING] [remstr] string FROM] str string)
Параметр str обязательный, остальные параметры не обязательные. В случае если задан только один параметр str, то возвращает строку str удалив пробелы из начала и конца строки одновременно.
Пример:
SELECT TRIM (‘ текст ‘);
Результат: ‘текст’
С помощью пара метра remstr можно задавать символы или подстроки, которые будут удаляться из начала и конца строки. С помощью управляющих параметров BOTH, LEADING, TRAILING можно задавать откуда будут удаляться символы:
- BOTH — удаляет подстроку remstr с начала и с конца строки;
- LEADING — удаляет remstr с начала строки;
- TRAILING — удаляет remstr с конца строки.
Пример:
SELECT TRIM (BOTH ‘а’ FROM ‘текст’);
Результат: ‘текст’
SELECT TRIM (LEADING ‘а’ FROM ‘текстааа’);
Результат: ‘текстааа’
SELECT TRIM (TRAILING ‘а’ FROM ‘ааатекст’);
Результат: ‘ааатекст’
Функция SPACE позволяет получить строку состоящую из определенного количества пробелов:
string SPACE(n integer)
Возвращает строку, которая состоит из n пробелов.
Функция REPLACE нужна для замены заданных символов в строке:
string REPLACE(str string, from_str string, to_str string)
Функция заменяет в строке str все подстроки from_str на to_str и возвращает результат. Поддерживает многобайтные символы.
Пример:
SELECT REPLACE ( ‘замена подстроки’, ‘подстроки’, ‘текста’ )
Результат: ‘замена текста’
Функция REPEAT:
string REPEAT(str string, count integer)
Функция возвращает строку, которая состоит из count повторений строки str. Поддерживает многобайтовые символы.
Пример:
SELECT REPEAT (‘w’, 3);
Результат: ‘www’
Функция REVERSE переворачивает строку:
string REVERSE(str string)
Переставляет в строке str все символы с последнего на первый и возвращает результат. Поддерживает многобайтовые символы.
Пример:
SELECT REVERSE (‘текст’);
Результат: ‘тскет’
Функция INSERT для вставки подстроки в строку:
string INSERT(str string, pos integer, len integer, newstr string)
Возвращает строку полученную в результате вставки в строку str подстроки newstr с позиции pos. Параметр len указывает сколько символов будет удалено из строки str, начиная с позиции pos. Поддерживает многобайтовые символы.
Пример:
SELECT INSERT (‘text’, 2, 5, ‘MySQL’);
Результат: ‘tMySQL’
‘SELECT INSERT (‘text’, 2, 0, ‘MySQL’);
Результат: ‘tMySQLext’
SELECT INSERT (‘вставка текста’, 2, 7, ‘MySQL’);
Результат: ‘SELECT INSERT (‘вставка текста’, 2, 7, ‘MySQL’);’
Если вдруг понадобиться заеменить в тексте все заглавные буквы на прописные, то можно воспользоваться одной из двух функций:
string LCASE(str string) и string LOWER(str string)
Обе функции заменяют в строке str заглавные буквы на прописные и возвращают результат. И та и другая поддерживают многобайтовые символы.
Пример:
SELCET LOWER (‘АБВГДеЖЗиКЛ’);
Результат:’абвгдежзикл’
Если же наоборот необходимо прописные буквы заменить заглавными, то также можно применить одну из двух функцийй:
string UCASE(str string) и string UPPER (str string)
Функции возвращают строку str, заменив все прописные символы на заглавные. Также поддерживают многобайтовые символы.
Пример:
SELECT UPPER (‘Абвгдежз’);
Результат: ‘АБВГДЕЖЗ’
Строковых функций в языке SQL немного больше, чем рассмотрено в данной статье. Но так как даже большинство рассмотренных здесь функций используются редко, я закончу их рассмотрение. В следующих статьях я постараюсь рассмотреть реальные практические примеры использования строковых функций SQL. Поэтому не забудьте подписаться на обновления блога. До новых встреч!
CONCAT: объединяет строки. В качестве параметра принимает от 2-х и более строк, которые надо соединить:
SELECT CONCAT('Tom', ' ', 'Smith') -- Tom Smith
При этом в функцию можно передавать не только непосредственно строки, но и числа, даты – они будут преобразовываться в строки и также объединяться.
CONCAT_WS: также объединяет строки, но в качестве первого параметра принимает разделитель, который будет соединять строки:
SELECT CONCAT_WS(' ', 'Tom', 'Smith', 'Age:', 34) -- Tom Smith Age: 34
LENGTH: возвращает количество символов в строке. В качестве параметра в функцию передается строка, для которой надо найти длину:
SELECT LENGTH('Tom Smith') -- 9
LTRIM: удаляет начальные пробелы из строки. В качестве параметра принимает строку:
SELECT LTRIM(' Apple')
RTRIM: удаляет конечные пробелы из строки. В качестве параметра принимает строку:
SELECT RTRIM(' Apple ')
TRIM: удаляет начальные и конечные пробелы из строки. В качестве параметра принимает строку:
SELECT TRIM(' Tom Smith ')
С помощью дополнительного оператора можно задать где имеено удалить пробелы: BOTH
(в начале и в конце), TRAILING
(только в конце),
LEADING
(только в начале):
SELECT TRIM(BOTH FROM ' Tom Smith ')
LOCATE(find, search [, start]): возвращает позицию первого вхождения подстроки find в строку search. Дополнительный параметр start
позволяет установить позицию в строке search, с которой начинается поиск подстроки find. Если подстрока search не найдена, то возвращается 0:
SELECT LOCATE('om', 'Tom Smith'); -- 2 SELECT LOCATE('m', 'Tom Smith'); -- 3 SELECT LOCATE('m', 'Tom Smith', 4); -- 6 SELECT LOCATE('mig', 'Tom Smith'); -- 0
LEFT: вырезает с начала строки определенное количество символов. Первый параметр функции – строка, а второй – количество символов, которые надо вырезать сначала строки:
SELECT LEFT('Apple', 3) -- App
RIGHT: вырезает с конца строки определенное количество символов. Первый параметр функции – строка, а второй – количество символов, которые надо вырезать сначала строки:
SELECT RIGHT('Apple', 3) -- ple
SUBSTRING(str, start [, length]): вырезает из строки str подстроку, начиная с позиции start.
Третий необязательный параметр передает количество вырезаемых символов:
SELECT SUBSTRING('Galaxy S8 Plus', 8), -- S8 Plus (SELECT SUBSTRING('Galaxy S8 Plus', 8, 2) ); -- S8
SUBSTRING_INDEX(str, delimiter, count): вырезает из строки str подстроку. Параметр delimiter определяет разделитель внутри строки.
А параметр count определяет, до какого вхождения разделителя надо вырезать подстроку. Если count положительный, то подстрока вырезается с начала, если
count отрицательный, то с конца строки str:
SELECT SUBSTRING_INDEX('Galaxy S8 Plus', ' ', 1), -- Galaxy (SELECT SUBSTRING_INDEX('Galaxy S8 Plus', ' ', 2) ), -- Galaxy S8 (SELECT SUBSTRING_INDEX('Galaxy S8 Plus', ' ', -2) ); -- S8 Plus
REPLACE(search, find, replace): заменяет в строке find подстроку search на подстроку replace.
Первый параметр функции – строка, второй – подстрока, которую надо заменить, а третий – подстрока, на которую надо заменить:
SELECT REPLACE('Galaxy S8 Plus', 'S8 Plus', 'Note 8') -- Galaxy Note 8
INSERT(str, start, length, insert): вставляет в строку str, заменяя length символов с позиции start подстрокой insert.
Первый параметр функции – строка, второй – позиция, с которой надо заменить, третий – сколько символов с позиции start надо заменить вставляемой подстрокой,
четвертый параметр – вставляемая подстрока:
SELECT INSERT('Galaxy S9', 8, 3, 'Note 9'); -- Galaxy Note 9
REVERSE: переворачивает строку наоборот:
SELECT REVERSE('123456789') -- 987654321
LOWER: переводит строку в нижний регистр:
SELECT LOWER('Apple') -- apple
UPPER: переводит строку в верхний регистр
SELECT UPPER('Apple') -- APPLE
SPACE: возвращает строку, которая содержит определенное количество пробелов
REPEATE(str, count): возвращает строку, которая содержит определенное количество повторов подстроки str. Количество повторов задается
через параметр count.
SELECT REPEAT('ab', 5); -- ababababab
LPAD(str, length, pad): добавляет слева от строки str некоторое количество символов, которые определены в параметре pad.
Количество добавляемых символов вычисляется по формуле length - LENGTH(str)
. Если параметр length меньше длины строки str, то эта строка усекается до length
символов.
SELECT LPAD('Tom Smith', 13, '*'); -- ****Tom Smith
RPAD(str, length, pad): добавляет справа от строки str некоторое количество символов, которые определены в параметре pad.
Количество добавляемых символов вычисляется по формуле length - LENGTH(str)
. Если параметр length меньше длины строки str, то эта строка усекается до length
символов.
SELECT RPAD('Tom Smith', 13, '*'); -- Tom Smith****