Строковые функции возвращают NULL, если длина результата оказывается
больше, чем указано в значении серверного параметра max_allowed_packet.
See Раздел 5.5.2, «Настройка параметров сервера».
Для функций, работающих с позициями в строке, нумерация позиций начинается с 1.
Возвращает значение ASCII-кода крайнего слева символа строки str; 0 если
str является пустой строкой; NULL, если str равна NULL:
mysql> SELECT ASCII('2');
-> 50
mysql> SELECT ASCII(2);
-> 50
mysql> SELECT ASCII('dx');
-> 100
См. также функцию ORD().
-
ORD(str)Если крайний слева символ строки
strпредставляет собой многобайтный символ, то данная функция возвращает его код, который вычисляется на основе ASCII-кодов составляющих его символов по формуле: ((первый байт ASCII-кода)*256+(второй байт ASCII-кода))[*256+третий байт ASCII-кода...]. Если крайний слева символ не является многобайтным, то данная функция возвращает то же значение, что и ASCII():mysql> SELECT ORD('2'); -> 50 -
CONV(N,from_base,to_base)Преобразует числа из одной системы счисления в другую. Возвращает строковое представление числа
N, преобразованного из системы счисления с основойfrom_baseв систему счисления с основойto_base. Если хотя бы один из аргументов равенNULL, то возвращаетсяNULL. АргументNинтерпретируется как целое число, но может быть задан как целое число или строка. Минимальное значение основы системы счисления равно2, а максимальное -36. Если аргументto_baseпредставлен отрицательным числом, то принимается, чтоN- число со знаком. В противном случаеNтрактуется как беззнаковое число. ФункцияCONVработает с 64-битовой точностью:mysql> SELECT CONV("a",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' -
BIN(N)Возвращает строку, представляющую двоичную величину
N, гдеN- целое число большого размера (BIGINT). Эквивалентна функцииCONV(N,10,2). ЕслиNравноNULL, возвращаетсяNULL:mysql> SELECT BIN(12); -> '1100' -
OCT(N)Возвращает строковое представление восьмеричного значения числа
N, гдеN- целое число большого размера. Эквивалентно функцииCONV(N,10,8). ЕслиNравноNULL, возвращаетсяNULL:mysql> SELECT OCT(12); -> '14' -
HEX(N_or_S)Если
N_OR_S- число, то возвращается строковое представление шестнадцатеричного числаN, гдеN- целое число большого размера (BIGINT). Эквивалентна функцииCONV(N,10,16). ЕслиN_OR_S- строка, то функция возвращает шестнадцатеричную строкуN_OR_S, где каждый символ вN_OR_Sконвертируется в 2 шестнадцатеричных числа. Является обратной по отношению к строкам0xff.mysql> SELECT HEX(255); -> 'FF' mysql> SELECT HEX("abc"); -> 616263 mysql> SELECT 0x616263; -> "abc" -
CHAR(N,...)CHAR()интерпретирует аргументы как целые числа и возвращает строку, состоящую из символов, соответствующих ASCII-коду этих чисел. ВеличиныNULLпропускаются:mysql> SELECT CHAR(77,121,83,81,'76'); -> 'MySQL' mysql> SELECT CHAR(77,77.3,'77.3'); -> 'MMM' -
CONCAT(str1,str2,...)Возвращает строку, являющуюся результатом конкатенации аргументов. Если хотя бы один из аргументов равен
NULL, возвращаетсяNULL. Может принимать более 2 аргументов. Числовой аргумент преобразуется в эквивалентную строковую форму:mysql> SELECT CONCAT('My', 'S', 'QL'); -> 'MySQL' mysql> SELECT CONCAT('My', NULL, 'QL'); -> NULL mysql> SELECT CONCAT(14.3); -> '14.3' -
CONCAT_WS(separator, str1, str2,...)Функция
CONCAT_WS() обозначаетCONCAT With Separator(конкатенация с разделителем) и представляет собой специальную форму функцииCONCAT(). Первый аргумент является разделителем для остальных аргументов. Разделитель, так же как и остальные аргументы, может быть строкой. Если разделитель равенNULL, то результат будетNULL. Данная функция будет пропускать все величиныNULLи пустые строки, расположенные после аргумента-разделителя. Разделитель будет добавляться между строками, подлежащими конкатенации:mysql> SELECT CONCAT_WS(",","First name","Second name","Last Name"); -> 'First name,Second name,Last Name' mysql> SELECT CONCAT_WS(",","First name",NULL,"Last Name"); -> 'First name,Last Name' -
LENGTH(str),OCTET_LENGTH(str),CHAR_LENGTH(str),CHARACTER_LENGTH(str)Возвращает длину строки str:
mysql> SELECT LENGTH('text'); -> 4 mysql> SELECT OCTET_LENGTH('text'); -> 4Обратите внимание: для
CHAR_LENGTH()иCHARACTER_LENGTH()многобайтные символы учитываются только однажды. -
BIT_LENGTH(str)Возвращает длину строки
strв битах:mysql> SELECT BIT_LENGTH('text'); -> 32 -
LOCATE(substr,str),POSITION(substr IN str)Возвращает позицию первого вхождения подстроки
substrв строкуstr. Если подстрока substr в строкеstrотсутствует, возвращается0:mysql> SELECT LOCATE('bar', 'foobarbar'); -> 4 mysql> SELECT LOCATE('xbar', 'foobar'); -> 0Данная функция поддерживает многобайтные величины. В MySQL 3.23 эта функция чувствительна к регистру, а в 4.0 она чувствительна к регистру только в случае, если хотя бы один из аргументов является строкой с двоичными данными.
-
LOCATE(substr,str,pos)Возвращает позицию первого вхождения подстроки
substrв строкуstr, начиная с позицииpos. Если подстрокаsubstrв строкеstrотсутствует, возвращается0:mysql> SELECT LOCATE('bar', 'foobarbar',5); -> 7Данная функция поддерживает многобайтные величины. В MySQL 3.23 эта функция чувствительна к регистру, а в 4.0 она чувствительна к регистру, только в случае, если хотя бы один из аргументов является строкой с двоичными данными.
-
INSTR(str,substr)Возвращает позицию первого вхождения подстроки
substrв строкуstr. То же, что и двухаргументная форма функцииLOCATE(), за исключением перемены мест аргументов:mysql> SELECT INSTR('foobarbar', 'bar'); -> 4 mysql> SELECT INSTR('xbar', 'foobar'); -> 0Данная функция поддерживает многобайтные величины. В MySQL 3.23 эта функция чувствительна к регистру, а в 4.0 она чувствительна к регистру только в случае, если хотя бы один из аргументов является строкой с двоичными данными.
-
LPAD(str,len,padstr)Возвращает строку
str, которая дополняется слева строкойpadstr, пока строкаstrне достигнет длиныlenсимволов. Если строкаstrдлиннее, чемlen, то она будет укорочена доlenсимволов.mysql> SELECT LPAD('hi',4,'??'); -> '??hi' -
RPAD(str,len,padstr)Возвращает строку
str, которая дополняется справа строкойpadstr, пока строкаstrне достигнет длиныlenсимволов. Если строкаstrдлиннее, чемlen, то она будет укорочена доlenсимволов.mysql> SELECT RPAD('hi',5,'?'); -> 'hi???' -
LEFT(str,len)Возвращает крайние слева
lenсимволов из строкиstr:mysql> SELECT LEFT('foobarbar', 5); -> 'fooba'Данная функция поддерживает многобайтные величины.
-
RIGHT(str,len)Возвращает крайние справа
lenсимволов из строкиstr:mysql> SELECT RIGHT('foobarbar', 4); -> 'rbar'Данная функция поддерживает многобайтные величины.
-
SUBSTRING(str,pos,len),SUBSTRING(str FROM pos FOR len),MID(str,pos,len)Возвращает подстроку длиной
lenсимволов из строкиstr, начиная от позицииpos. Существует форма с операторомFROM, для которой используется синтаксис ANSI SQL92:mysql> SELECT SUBSTRING('Quadratically',5,6); -> 'ratica'Данная функция поддерживает многобайтные величины.
-
SUBSTRING(str,pos),SUBSTRING(str FROM pos)Возвращает подстроку из строки
str, начиная с позицииpos:mysql> SELECT SUBSTRING('Quadratically',5); -> 'ratically' mysql> SELECT SUBSTRING('foobarbar' FROM 4); -> 'barbar'Данная функция поддерживает многобайтные величины.
-
SUBSTRING_INDEX(str,delim,count)Возвращает подстроку из строки
strперед появлениямcountвхождений разделителяdelim. Еслиcountположителен, то возвращается все, что находится слева от последнего разделителя (считая слева). Еслиcountотрицателен, то возвращается все, что находится справа от последнего разделителя (считая справа):mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); -> 'www.mysql' mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); -> 'mysql.com'Данная функция поддерживает многобайтные величины.
-
LTRIM(str)Возвращает строку
strс удаленными начальными пробелами:mysql> SELECT LTRIM(' barbar'); -> 'barbar'Данная функция поддерживает многобайтные величины.
-
RTRIM(str)Возвращает строку
strс удаленными конечными пробелами:mysql> SELECT RTRIM('barbar '); -> 'barbar'Данная функция поддерживает многобайтные величины.
-
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)Возвращает строку
strс удаленными всеми префиксами и/или суффиксами, указанными вremstr. Если не указан ни один из спецификаторовBOTH,LEADINGилиTRAILING, то подразумеваетсяBOTH. Если аргументremstrне задан, то удаляются пробелы:mysql> SELECT TRIM(' bar '); -> 'bar' mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); -> 'barxxx' mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); -> 'bar' mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); -> 'barx'Данная функция поддерживает многобайтные величины.
-
SOUNDEX(str)Возвращает саундекс от str.
Soundex - ``идентификатор звучания строки''. Словосочетания ``К скалам бурым'' и ``С каламбуроми'' должны давать одинаковый саундекс, т.к. на слух они звучат одинаково. Заметим, однако, что этой функции для русского языка не существует. MySQL нуждается в ней, и если кто-то может предоставить алгоритм саундекса на русском языке - свяжитесь с нами. - Прим. переводчика.
Две созвучные строки, создающие впечатление почти одинаковых, могут иметь идентичные саундексы. Обычно стандартная саундекс-строка имеет длину 4 символа, но функция
SOUNDEX()возвращает строку произвольной длины. Можно использовать функциюSUBSTRING()для извлечения стандартного саундекса строки из результата функцииSOUNDEX(). В строкеstrигнорируются все символы, не являющиеся буквами или цифрами. Все международные буквенные символы, не входящие в диапазонA-Z, трактуются как гласные:mysql> SELECT SOUNDEX('Hello'); -> 'H400' mysql> SELECT SOUNDEX('Quadratically'); -> 'Q36324' -
SPACE(N)Возвращает строку, состоящую из
Nпробелов:mysql> SELECT SPACE(6); -> ' ' -
REPLACE(str,from_str,to_str)Возвращает строку
str, в которой все вхождения строкиfrom_strзаменены наto_str:mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww'); -> 'WwWwWw.mysql.com'Данная функция поддерживает многобайтные величины.
-
REPEAT(str,count)Возвращает строку, состоящую из строки
str, повтореннойcountраз. Если значениеcount <= 0, возвращает пустую строку. ВозвращаетNULL, еслиstrилиcountравныNULL:mysql> SELECT REPEAT('MySQL', 3); -> 'MySQLMySQLMySQL' -
REVERSE(str)Возвращает строку
strс обратным порядком символов:mysql> SELECT REVERSE('abc'); -> 'cba'Данная функция поддерживает многобайтные величины.
-
INSERT(str,pos,len,newstr)Возвращает строку
str, в которой подстрока начиная с позицииpos, имеющая длинуlenзамещена наnewstr:mysql> SELECT INSERT('Quadratic', 3, 4, 'What'); -> 'QuWhattic'Данная функция поддерживает многобайтные величины.
-
ELT(N,str1,str2,str3,...)Возвращает
str1, еслиN = 1,str2, еслиN = 2, и так далее. ЕслиNменьше, чем1или больше, чем число аргументов, возвращаетсяNULL. ФункцияELT()является дополненительной по отношению к функцииFIELD():mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo'); -> 'ej' mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo'); -> 'foo' -
FIELD(str,str1,str2,str3,...)Возвращает индекс строки
strв спискеstr1, str2, str3, .... Если строкаstrне найдена, возвращается0. ФункцияFIELD()является дополнительной по отношению к функцииELT():mysql> SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo'); -> 2 mysql> SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo'); -> 0 -
FIND_IN_SET(str,strlist)Возвращает значение от
1доN, если строкаstrприсутствует в спискеstrlist, состоящем изNподстрок. Список строк представляет собой строку, состоящую из подстрок, разделенных символами ','. Если первый аргумент представляет собой строку констант, а второй является столбцом типаSET, функцияFIND_IN_SET()оптимизируется для использования двоичной арифметики! Возвращает0, еслиstrотсутствует в спискеstrlistили еслиstrlistявляется пустой строкой. Если один из аргументов равенNULL, возвращается0. Данная функция не будет корректно работать, если первый аргумент содержит символ ',':mysql> SELECT FIND_IN_SET('b','a,b,c,d'); -> 2 -
MAKE_SET(bits,str1,str2,...)Возвращает множество (строку, содержащую подстроки, разделенные символами '
,'), состоящее из строк, имеющих соответствующий бит в набореbits. Аргументstr1соответствует биту0,str2- биту1, и так далее. Нулевые строки в наборахstr1,str2,...не прибавляются к результату:mysql> SELECT MAKE_SET(1,'a','b','c'); -> 'a' mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world'); -> 'hello,world' mysql> SELECT MAKE_SET(0,'a','b','c'); -> '' -
EXPORT_SET(bits,on,off,[separator,[number_of_bits]])Возвращает строку, где для каждому установленному биту в аргументе
bitsсоответствует строкаon, а каждому сброшенному биту -off. Каждая строка отделена разделителем, указанным в параметреseparator(по умолчанию - ','), причем используется только количество битов, заданное аргументомnumber_of_bits(по умолчанию 64), из всего количества, указанного вbits:mysql> SELECT EXPORT_SET(5,'Y','N',',',4) -> Y,N,Y,N -
LCASE(str),LOWER(str)Возвращает строку
str, в которой все символы переведены в нижний регистр в соответствии с текущей установкой набора символов (по умолчанию - ISO-8859-1 Latin1):mysql> SELECT LCASE('QUADRATICALLY'); -> 'quadratically'Данная функция поддерживает многобайтные величины.
-
UCASE(str),UPPER(str)Возвращает строку
str, в которой все символы переведены в верхний регистр в соответствии с текущей установкой набора символов (по умолчанию - ISO-8859-1 Latin1):mysql> SELECT UCASE('Hej'); -> 'HEJ'Данная функция поддерживает многобайтные величины.
-
LOAD_FILE(file_name)Читает заданный файл и возвращает его содержимое в виде строки. Данный файл должен находится на сервере, должен быть указан полный путь к этому файлу и пользователь должен обладать привилегией
FILE. Размер данного файла должен быть меньше указанного вmax_allowed_packetи файл должен быть открыт для чтения для всех. Если файл не существует или не может быть прочитан по одной из вышеупомянутых причин, то функция возвращаетNULL:mysql> UPDATE tbl_name SET blob_column=LOAD_FILE("/tmp/picture") WHERE id=1;При использовании версии MySQL, отличной от 3.23, чтение файла необходимо выполнять внутри вашего приложения и использовать команду
INSERTдля внесения в базу данных информации, содержащейся в файле. Один из путей реализации этого с использованием библиотекиMySQL++можно найти на https://www.mysql.com/documentation/mysql++/mysql++-examples.html. -
QUOTE(str)Экранирует строку с тем, чтобы получить корректное значение для SQL-выражения. Строка заключается в одинарные кавычки, и каждое вхождение одинарной кавычки ('
''), обратного слеша ('\'), значения ASCII NUL и Control-Z экранируются обратным слешом. Если аргумент -NULL, то тогда результатом будет слово "NULL" без окружающих кавычек.mysql> SELECT QUOTE("Don't"); -> 'Don\'t!' mysql> SELECT QUOTE(NULL); -> NULL
MySQL при необходимости автоматически конвертирует числа в строки и наоборот:
mysql> SELECT 1+"1";
-> 2
mysql> SELECT CONCAT(2,' test');
-> '2 test'
Для преобразования числа в строку явным образом, необходимо передать его в
качестве аргумента функции CONCAT().
Если строковая функция содержит в качестве аргумента строку с двоичными данными, то и результирующая строка также будет строкой с двоичными данными. При этом число, конвертированное в строку, воспринимается как строка с двоичными данными. Это имеет значение только при выполнении операций сравнения.