Поиск

Строковые функции

Строковые функции возвращают NULL, если длина результата превысит значение системной переменной max_allowed_packet. Для функций, которые оперируют позициями в строке, нумерация позиций начинается с 1.

  • ASCII {строка). Возвращает числовое значение первого символа строки строка.
    Возвращает 0, если строка является пустой. Возвращает NULL, если строка равна
    NULL. ASCII () работает с символами в диапазоне кодов от 0 до 255.

    mysql> SELECT ASCII('2');

    -> 50 mysql> SELECT ASCII(2);

    -> 50 mysql> SELECT ASCII('dx');

    -> 100

    См. также функцию ORD ().

  • bin (N). Возвращает строковое представление двоичного значения N, где N - длин
    ное целое
    (BIGINT). Это эквивалентно CONV(N, 10,2). Возвращает NULL, если N рав
    но
    NULL.

    mysql> SELECT BIN(12); -> ' 1100'

    ВIT_LENGTH {строка). Возвращает длину строки строка в битах.

    mysql> SELECT BIT _LENGTH('text'); -> 32

    Функция BIT_LENGTH() была добавлена в MySQL 4.0.2.

  • CHAR (iV,...). Интерпретирует аргументы как целые и возвращает строку, состоя
    щую из символов с кодами, заданными этими целыми. Значение NULL пропуска
    ются.

    mysql> SELECT CHAR(77,121,83,81, '76');

    -> 'MySQL' raysql> SELECT CHAR(77,77.3,'77.3');

    -> 'МММ'

  • CHAR_LENGTH{строка). Возвращает длину строки строка, измеренную в символах.
    Многобайтные символы считаются как один. Это значит, что для строки, состоя
    щей из пяти двухбайтных символов, LENGTH() вернет 10, в то время как
    CHAR_LENGTH ()-5.

  • CHARACTER_LENGTH (строка)
    CHARACTER_LENGTH () - ЭТО СИНОНИМ CHAR_LENGTH ().

  • COMPRESS {строка_для_сжатия). Сжимает строку. Эта функция требует, чтобы
    MySQL был скомпилирован с библиотекой поддержки сжатия, такой как zlib. В
    противном случае возвращаемым значением всегда будет NULL.

    mysql> SELECT LENGTH(COMPRESS(REPEAT('a1,1000)));

    -> 21 mysql> SELECT LENGTH(COMPRESS(")];

    -> 0 mysql> SELECT LENGTH(COMPRESS( 'a'));

    -> 13 mysql> SELECT LENGTH (COMPRESS (REPEAT ('a', 16))) ;

    -> 15

    Содержимое сжатой строки сохраняется следующим образом:

    • Пустая строка сохраняется как пустая строка.

    • Непустая строка сохраняется как четырехбайтовая длина несжатой строки
    (младший байт идет первым), за которой следует сжатая строка. Если строка
    завершается пробелом, добавляется дополнительный символ '.' во избежание
    усечения завершающих пробелов, которое имеет место при сохранении в
    столбцах CHAR или VARCHAR. (Использовать для сохранения сжатых строк
    столбцы CHAR или VARCHAR не рекомендуется. Взамен лучше применять столб
    цы BLOB.)

    Функция COMPRESS () появилась в MySQL 4.1.1.

  • CONCAT{строка1,строка2,...). Возвращает строку, которая состоит из сцеплен
    ных аргументов. Возвращает NULL, если любой из аргументов равен NULL. Прини
    мает один или более аргументов. Числовой аргумент преобразуется в эквивалент
    ную строковую форму.

    mysql> SELECT CONCAT('My', 'S 'QL);

    -> 'MySQL' mysql> SELECT CONCAT('My', NULL, 'QL');

    -> NULL mysql> SELECT CONCAT(14.3);

    -> '14.3'

  • CONCAT_WS {разделитель, строка1, строка2, ...)

    CONCAT_WS означает "Concat With Separator" ("CONCAT с разделителем") и представляет собой особую форму CONCAT (). Первый аргумент - это разделитель для остальных аргументов. Разделитель добавляется между соединяемыми строками. Разделитель может быть строкой, как и остальные аргументы. Если разделитель равен NULL, результат тоже равен NULL. Функция пропускает любые аргументы NULL после разделителя.

    mysql> SELECT CONCAT_WS(',','First name1,'Second name','Last Name');

    -> 'First name,Second name,Last Name' mysql> SELECT CONCAT_WS (',', 'First name', NULL,'Last Name');

    -> 'First name,Last Name1

    До версии MySQL 4.0.14 функция CONCAT_WS () пропускала пустые строки, так же как и значения NULL.

  • CONV {N, основание_начальное, о снов а ние_ конечное)

    Конвертирует числа между разными системами счисления. Возвращает строковое представление числа N, преобразованное из системы счисления с основанием основ ание_ начальное в систему счисления с основанием основание_конечное. Возвращает NULL, если любой из аргументов равен NULL. Аргумент N интерпретируется как целое, но может указываться и как целое, и как строка. Минимальное основание системы счисления - 2, максимальное - 36. Если значение основа-ние_конечное отрицательное, N рассматривается как целое со знаком. В противном случае N считается беззнаковым целым. CONV() работаетс 64-разрядной точностью.

    mysql> SELECT CONV( 'а',16,2);

    -> '1010' mysql> SELECT CONV('6E' ,18, 8) ;

    -> '172' mysql> SELECT CONV(-17,10,-18);

    -> '-H' mysql> SELECT CONV(10+'10'+'10'+0xa,10,10);

    -> 40'

  • ELT{N, строка1, строка2, строкаЗ, ...)

    Возвращает строка!, если N = 1, строка2, если N = 2, и так далее. Возвращает NULL, если Nменьше 1 или больше количества аргументов. ELT() - это дополнение field().

    mysql> SELECT ELT(1, 'ej 'Heja', 'hej1, 'foo');

    -> 'ej' mysql> SELECT ELT(4, 'ej', 'Heja1, 'hej1, 'foo1);

    -> 'foo'

  • EXPORT_SET{биты, вкл,выкл, [разделитель, [количество_бит] ])

    Возвращает строку, в которой для каждого установленного в 1 бита в аргументе биты возвращается строка вкл, а для каждого бита, установленного в 0, - строка выкл. Каждая строка отделяется разделителем разделитель (по умолчанию - ','), и используются только количество_бит бит (по умолчанию 64).

    mysql> SELECT EXPORT__SET(5,fY','N',',',4)

    -> Y,N,Y,N

  • FIELD {строка, строка 1, строка2, строкаЗ,...). Возвращает позицию вхождения
    аргумента строка в список строка19 строка2, строкаЗ, ... Возвращает 0, если вхо
    ждение не найдено. FIELD () - это дополнение ELT ().

    mysql> SELECT FIELD('еj', 'Hej 'ej1, 'Heja', 'hej1, 'foo');

    -> 2 mysql> SELECT FIELD('fo f Hej 'ej', 'Heja1, 'hej1, 'foo');

    -> 0

  • find_in_set {строка, список_строк). Возвращает значение от 1 до N, если строка
    находится в списке строк список_строк, состоящего из N подстрок. Список строк -
    это строка, состоящая из подстрок, разделенных символом ','. Если первый аргу
    мент — константная строка, а второй - столбец типа SET, функция FIND_IN_SET ()
    оптимизирована для использования битовой арифметики. Возвращает 0, если
    строка не входит в списокстрок, или если список_строк — пустая строка. Воз
    вращает NULL, если любой из аргументов равен NULL. Эта функция не работает
    правильно, если первый аргумент содержит запятую.

    mysql> SELECT FIND_IN_SET('b','a,b,c,d'); -> 2

  • HEX {Ч_или_С). Если Ч_или_С - число, возвращает строковое представление шест-надцатеричного значения N, где N - длинное целое (BIGINT). Это эквивалентно CONV(N,10,16).

    Начиная с версии MySQL 4.0.1 и выше, если Ч_или_С — строка, то возвращается шестнадцатеричная строка ¥_или_С, в которой каждый символ преобразован в два шестнадцатеричных разряда.

    mysql> SELECT HEX(255);

    -> fFF' mysql> SELECT 0x616263;

    -> 'abc' mysql> SELECT HEX('abc');

    -> 616263

  • INSERT {строка, позиция, длина, новая_строка). Возвращает строку строка, в кото
    рой подстрока длиной длина, начинающаяся с позиции позиция, заменяется стро
    кой новая_строка.

    mysql> SELECT INSERT('Quadratic', 3, 4, 'What'); -> 'QuWhattic'

    Эта функция безопасна в отношении многобайтных наборов символов.

  • WS1R{строка,подстрока). Возвращает позицию первого вхождения подстроки
    подстрока в строку строка. Это то же самое, что двух аргументная форма
    LOCATE ( ), только аргументы переставлены местами.

    mysql> SELECT INSTR('foobarbar', 'bar');

    -> 4

    mysql> SELECT INSTR('xbar', 'foobar'); -> 0

    Эта функция безопасна в отношении многобайтных наборов символов. В MySQL 3.23 эта функция чувствительна к регистру. В 4.0 она чувствительна к регистру, только если любой аргументов является бинарной строкой.

    ш LCASE(строка). Функция LCASE() - синоним для LOWER ().

  • LEFT {строка, длина). Возвращает левые длина символов строки строка.

    mysql> SELECT LEFT(foobarbar', 5); -> 'fooba1

  • ЬЕЫСТЩстрока}. Возвращает длину строки строка в байтах. Многобайтные сим
    волы считаются по количеству байт. Это значит, что для строки, содержащей пять
    двухбайтных символов,
    LENGTH () вернет 10, в то время как CHAR_LENGTHО -5.

    mysql> SELECT LENGTH('text');

  • LOAD_FI1E (шя_файла). Читает файл и возвращает его содержимое в виде строки.
    Файл должен находиться на сервере и к нему должен указываться полный путь.
    Кроме того, необходимо иметь привилегию FILE. Файл должен быть доступен по
    чтению всем, и иметь размер менее max_allowed_packet байт.

    Если файл не существует или не может быть прочитан, функция возвращает NULL.

    mysql> UPDATE имя файла

    SET столбец_Ыob=LOAD_FILE (' /tmp/picture') WHERE id=l;

    До версии MySQL 3.23 вы должны были читать файл внутри приложения и создавать оператор INSERT для обновления базы данных содержимым файла. Если вы используете библиотеку MySQL++, единственный способ сделать это описан в руководстве по MySQL++, которое доступно по адресу http://dev.mysql.com/doc.

  • LOCATE(подстрока, строка)
    LOCATE(подстрока,строка, позиция)

    Первый синтаксис возвращает позицию первого вхождения подстроки подстрока в строку строка. Второй синтаксис возвращает позицию первого вхождения подстроки подстрока в строку строка, начиная с позиции позиция. Если подстрока не входит в строку строка, возвращается 0.

    mysql> SELECT LOCATE('bar', 'foobarbar');

    -> 4 mysql> SELECT LOCATE('xbar', 'foobar');

    -> 0 mysql> SELECT LOCATE('bar, 'foobarbar',5);

    -> 7

    Эта функция безопасна в отношении многобайтных наборов символов. В MySQL 3.23 эта функция чувствительна к регистру. В 4.0 она чувствительна к регистру, только если любой из аргументов является бинарной строкой.

  • LOWER{строка). Возвращает строку строка, в которой все символы приведены к
    нижнему регистру в соответствии с текущим набором символов (по умолчанию
    ISO-8859-1 Latinl).

    mysql> SELECT LOWER( 'QUADRATICALLY'); -> 'quadratically1

    Функция безопасна в отношении многобайтных наборов символов.

    ш LPAD{строка,длина, строка-заполнитель). Возвращает строку строка, добавив слева строкой строка-заполнитель до длины длина. Если строка длиннее, чем указано в аргументе длина, возвращается значение, усеченное до длина символов.

    mysql> SELECT LPAD('hi',4,'??');

    mysql> SELECT LPAD('hi',1,'??'); -> 'h(

    LTRIM { строка). Возвращает строку строка с удаленными ведущими пробелами.

    mysql> SELECT LTRIM(' barbar'); -> 'barbar1

    Функция безопасна в отношении многобайтных наборов символов.

    MAke_set{биты,строка 1,строка2,...). Возвращает набор (строку, содержащую подстроки, разделенные запятой), состоящий из строк, которые имеют соответствующую установку битов в биты. При этом строка1 соответствует нулевому (по порядку) биту, строка2 - первому и так далее. Значения NULL в списке строка1, строка2, ... к результату не добавляются.

    mysql> SELECT MAKEJSET(1, 'а','b',1);

    -> 'а' mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');

    -> 'hello,world' mysql> SELECT MAKE__SET(1 | 4,'hello','nice',NULL,'world');

    -> 'hello' mysql> SELECT MAKE_SET(0, 'a','b','c');

    -> ''

    MID (строка, позиция, длина)

    MID (строка, позиция, длина) -это синоним для SUBSTR (строка, позиция, длина).

    ОСТ (N). Возвращает строковое представление восьмеричного значения N, где N-

    длинное целое.

    Это эквивалент CONV(N, 10, 8). Возвращает NULL, если N равно NULL.

    mysql> SELECT ОСТ(12);

    -> 'И'

    OCTET_LENGTH(строка) OCTET _LENGTH () - ЭТО СИНОНИМ ДЛЯ LENGTH ().

    ORD{строка). Если самый левый символ строки строка многобайтный, возвращается код этого символа, вычисленный из числовых значений байтов, из которых он состоит, с использованием формулы:

    (код 1-го байта * 256) + (код 2-го байта * 2562) + (код 3-го байта * 2563)...

    Если же самый левый символ строки строка не многобайтный, то ORD () возвращает то же значение, что и функция ascii ().

    mysql> SELECT 0RD('2');

    -> 50

  • POSITION{подстрока IN строка)

    POSITION {подстрока IN строка) -это синоним для LOCATE {подстрока, строка).

  • QUOTE {строка). Заключает строку в кавычки, чтобы результат можно было ис
    пользовать как допустимое значение в SQL-операторах. Строка окружается оди
    нарными кавычками, а все вхождения в нее одинарной кавычки ("'"), обратной
    косой черты ("")- ASCII NUL и Control-Z предваряются обратной косой чертой.
    Если аргумент равен
    NULL, возвращается слово "NULL" без кавычек. Функция
    QUOTE() появилась в версии MySQL 4.O.3.

    mysql> SELECT QUOTE('Don't');

    -> 'DonVt!' mysql> SELECT QUOTE(NULL);

    -> NULL

  • REPEAT {строка, количество). Возвращает строку, состоящую из аргумента строка,
    повторенного количество раз. Если количество < 0, возвращается пустая строка.
    Возвращает
    NULL, если строка или количество равно NULL.

    mysql> SELECT REPEAT('MySQL', 3); -> 'MySQLMySQLMySQL1

  • REPLACE {строка, строка_с, строка_в). Возвращает строку строка, в которой все
    вхождения строка_с заменены на строка_в.

    mysql> SELECT REPLACE('www.mysql.com', 'w1, 'Ww'); -> 'WwWwWw.mysql.com1

    Функция безопасна в отношении многобайтных наборов символов.

  • REVERSE {строка). Возвращает строку строка с обратным порядком символов.

    mysql> SELECT REVERSE('abc'); -> 'cba1

    Функция безопасна в отношении многобайтных наборов символов.

  • RIGHT {строка, длина). Возвращает длина правых символов строки строка.

    mysql> SELECT RIGHT('foobarbar', 4); -> 'rbar'

    Функция безопасна в отношении многобайтных наборов символов.

  • RPAD {строка, длина, строка-заполнитель). Возвращает строку строка, дополнен
    ную справа строкой
    строка-заполнитель до длины длина. Если строка длиннее,
    чем длина, возвращается значение, усеченное до длина символов.

    mysql> SELECT RPAD('hi',5,'??');

    -> 'hi???' mysql> SELECT RPAD('hi',1,' ?') ;

    -> 'h'

    Функция безопасна в отношении многобайтных наборов символов.

  • RTRIM{ строка). Возвращает строку строка с удаленными завершающими пробелами.

    mysql> SELECT RTRIM('barbar '); -> 'barbar'

    Функция безопасна в отношении многобайтных наборов символов.

  • S0UNDEX(строка). Возвращает строку, описывающую звучание (soundex) строки
    строка. Две строки, которые произносятся почти одинаково, должны иметь иден
    тичные строки звучания. Стандартная строка звучания состоит из четырех симво
    лов, однако функция SOUNDEX () возвращает строку любой длины. С помощью
    функции SUBSTRING!), примененной к результату, можно получить стандартную
    строку звучания. Все небуквенные символы игнорируются. Все интернациональ
    ные символы вне диапазона A-Z, представляются гласными.

    mysql> SELECT SOUNDEX('Hello');

    -> 'H400' mysql> SELECT SOUNDEX('Quadratically');

    -> 'Q36324'

    На заметку!

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

  • выражение! SOUNDS LIKE выражение2. Это то же самое, что SOUNDEX {выражение!)
    = SOUNDEX {выражение2). Доступно только в MySQL 4.1 и выше.
  • SPACE {N). Возвращает строку, состоящую из N пробелов.

    mysql> SELECT SPACE(6); -> '

  • SUBSTRING{строка,позиция)
    SUBSTRING{строка FROM позиция)
    SUBSTRING(строка,позиция,длина)
    SUBSTRING{строка FROM позиция FOR длина)

    Формы без аргумента длина возвращают подстроку строки строка, начиная с позиции позиция. Формы с аргументом длина возвращают подстроку строки строка длиной длина символов, начиная с позиции позиция. Формы, использующие FROM, представляют стандартный синтаксис SQL.

    mysql> SELECT SUBSTRING('Quadratically',5);

    -> 'ratically' mysql> SELECT SUBSTRING('foobarbar' FROM 4);

    -> 'barbar' mysql> SELECT SUBSTRING('Quadratically',5,6);

    -> 'ratica'

    Функция безопасна в отношении многобайтных наборов символов.

  • SUBSTRING_INDEX{строка,разделитель,количество). Возвращает подстроку строки
    строка до вхождения номер количество разделителя разделитель. Если значение
    количество положительное, возвращается все, что лежит слева от финального раз
    делителя (считая слева направо). Если значение количество отрицательное, возвра
    щается все, что лежит справа от финального разделителя (считая справа налево).

    mysql> SELECT SUBSTRINGJENDEX('www.mysql.com', '.', 2);

    -> 'www.mysql' mysql> SELECT SUBSTRINGJENDEX('www.mysql.com', '.', -2);

    -> 'mysql.com'

    Функция безопасна в отношении многобайтных наборов символов.

  • ТММШВОГН | LEADING | TRAILING] [удаляемая_строка] FROM] строка)
    Возвращает строку строка с удаленными префиксами и/или суффиксами удаляе-
    мая_строка.
    Если не указано ни BOTH, ни LEADING, ни TRAILING, подразумевается
    BOTH. Если не указано
    удаляемая_ строка, удаляются пробелы.

    mysql> SELECT TRIM(f bar ');

    -> 'bar' mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');

    -> 'barxxx' raysql> SELECT TRIM(BOTH 'xf FROM 'xxxbarxxx1);

    -> 'bar' mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');

    -> 'barx'

    Функция безопасна в отношении многобайтных наборов символов.

  • UCASE {строка)

    UCASE() -синоним для UPPER().

  • UNCOMPRESS {строка_для_распаковки). Распаковывает строку, сжатую функцией
    COMPRESS (). Если аргумент не является упакованной строкой, возвращается null.
    Функция требует, чтобы MySQL был скомпилирован с библиотекой сжатия, такой
    как zlib. В противном случае возвращаемое значение всегда равно NULL.

    mysql> SELECT UNCOMPRESS(COMPRESS('any string'));

    -> 'any string' mysql> SELECT UNCOMPRESS('any string');

    -> NULL

    Функция UNCOMPRESS() появилась в версии MySQL 4.1.1.

  • ШС0НР№ВВЕи_1ЕШТВ {строка_для_распаковки). Возвращает длину строки перед
    сжатием.

    mysql> SELECT UNCOMPRESSED_LENGTH (COMPRESS (REPEAT ('a' ,30))) ;

    -> 30

    Функция UNCOMPRESSED_LENGTH П была добавлена в MySQL 4.1.1.

  • UNHEX(строка)

Выполняет действие, противоположное функции HEX {строка). То есть, интерпретирует каждую пару шестнадцатеричных цифр аргумента как число и преобразует в символ, представленный этим числом. Символы результата возвращаются в виде бинарной строки.

mysql> SELECT UNHEX('4D7953514C) ;

-> 'MySQL' mysql> SELECT 0x4D7953514C;

-> 'MySQL' raysql> SELECT UNHEX(HEX('string'));

-> 'string' mysql> SELECT HEX(UNHEX('1267' )) ;

-> '1267'

Функция UNHEX () появилась в версии MySQL 4.1.2.


162 Глава 5. Функции и операции

Возвращает строку строка, у которой все символы приведены к верхнему регистру в соответствии с текущим набором символов (по умолчанию ISO-8859-1 Latin1).

mysql> SELECT UPPER('Неj');

-> 'HEJ1

Функция безопасна в отношении многобайтных наборов символов.