Функции преобразования
Функция CONV() преобразует числа из одной системы счисления в другие. Она имеет следующий синтаксис:
CONV(число,N,M)
Аргумент число находится в системе счисления с основанием N. Функция переводит его в систему счисления с основанием M и возвращает значение в виде строки.
Следующий запрос переводит число 2 из десятичной системы счисления в двоичную:
SELECT CONV(2,10,2);
Результат: 10
Для перевода числа 2E из шестнадцатиричной системы в десятичную требуется запрос:
SELECT CONV('2E',16,10);
Результат: 46
Функция CHAR() переводит ASCII-код в строки. Она имеет следующий синтаксис:
CHAR(n1,n2,n3..)
n1,n2,n3 – ASCII-коды символов.
SELECT CHAR(83,81,76);
Результат: SQL
Следующие функции возвращают длину строки:
- LENGTH(строка);
- OCTET_LENGTH(строка);
- CHAR_LENGTH(строка);
- CHARACTER_LENGTH(строка).
SELECT LENGTH('MySQL');
Результат: 5
Иногда бывает полезной функция BIT_LENGTH(строка), которая возвращает длину строки в битах.
SELECT BIT_LENGTH('MySQL');
Результат: 40
Функции работы с подстроками
Подстрокой обычно называют часть строки. Часто требуется узнать позицию первого вхождения подстроки в строку. Эту задачу в MySQL решают три функции:
- LOCATE(подстрока, строка [,позиция]);
- POSITION(подстрока, строка);
- INSTR(строка, подстрока).
Если подстрока не содержится в строке, то все три функции возвращают значение 0. Функция INSTR() отличается от двух других порядком аргументов. Функция LOCATE() может содержать третий аргумент позиция, который позволяет искать подстроку в строке не с начала, а с указанной позиции.
SELECT LOCATE('Топаз', 'открытое акционерное общество Топаз');
Результат: 31
SELECT POSITION('Топаз', 'открытое акционерное общество Топаз');
Результат: 31
SELECT INSTR('открытое акционерное общество Топаз',’Топаз’);
Результат: 31
SELECT LOCATE('Топаз', ' Завод Топаз и ООО Топаз', 9);
Результат: 20
SELECT LOCATE('Алмаз', 'открытое акционерное общество Топаз');
Результат: 0
Функции LEFT(строка, N) и RIGHT(строка, N) возвращают соответственно крайние левые и крайние правые N символов в строке.
SELECT LEFT('СУБД MySQL', 4);
Результат: СУБД
SELECT RIGHT('СУБД MySQL', 5);
Результат: MySQL
Иногда требуется получить подстроку, которая начинается с некоторой заданной позиции. Для этого используются функции:
- SUBSTRING(строка, позиция, N);
- MID(строка, позиция, N).
Обе функции возвращают N символов заданной строки, расположенных начиная с указанной позиции.
SELECT SUBSTRING('СУБД MySQL - одна из самых популярных СУБД', 6,5);
Результат: MySQL
При работе с электронными адресами и адресами сайтов очень полезна функция SUBSTR_INDEX(). Функция имеет три аргумента:
SUBSTR_INDEX(строка, разделитель, N).
Аргумент N может быть положительным или отрицательным. Если он отрицательный, то функция находит N-ое вхождение разделителя, если считать справа. После чего возвращает подстроку, расположенную справа от найденного разделителя. Если N положительно, то функция находит N-ое вхождение разделителя слева и возвращает подстроку, расположенную слева от найденного разделителя.
SELECT SUBSTRING_INDEX('www.mysql.ru','.',2);
Результат: www.mysql
SELECT SUBSTRING_INDEX('www.mysql.ru','.',-2);
Результат: mysql.ru
Функция REPLACE(строка,подстрока1,подстрока2) позволяет заменить в строке все вхождения подстроки1 на подстроку2.
SELECT REPLACE('ООО Топаз','Топаз','АЛМАЗ');
Результат: ООО АЛМАЗ
Функции удаления пробелов
Для удаления пробелов в строке используются следующие функции:
- LTRIM(строка) – удаляет пробелы в начале строки;
- RTRIM(строка) – удаляет пробелы в конце строки;
- TRIM(строка) – удаляет все пробелы.
SELECT TRIM(' www.mysql.ru ');
Результат: www.mysql.ru
Функцию TRIM() можно использовать и с более сложным синтаксисом:
TRIM([ [BOTH | LEADING | TRAILING] [подстрока] FROM] строка)
В этом случае функция удаляет не пробелы, а все вхождения подстроки. При этом если задан аргумент LEADING, то только слева. Если задан аргумент TRAILING, то только справа. Если задан аргумент BOTH, то и слева и справа.
SELECT TRIM(LEADING 'w' FROM 'www.mysql.ru.www');
Результат: .mysql.ru.www
SELECT TRIM(TRAILING 'w' FROM 'www.mysql.ru.www');
Результат: www.mysql.ru
SELECT TRIM(BOTH 'w' FROM 'www.mysql.ru.www');
Результат: www.mysql.ru