14.8 Функции и операторы строк
Таблица 14.12 Функции и операторы строк
| Имя | Описание |
|---|---|
ASCII() | Возвращает числовое значение левого символа |
BIN() | Возвращает строку, содержащую двоичное представление числа |
BIT_LENGTH() | Возвращает длину аргумента в битах |
CHAR() | Возвращает символ для каждого переданного целого числа |
CHAR_LENGTH() | Возвращает количество символов в аргументе |
CHARACTER_LENGTH() | Синоним для CHAR_LENGTH() |
CONCAT() | Возвращает конкатенированную строку |
CONCAT_WS() | Возвращает конкатенированную строку с разделителем |
ELT() | Возвращает строку по номеру индекса |
EXPORT_SET() | Возвращает строку, где для каждого установленного бита в значении bits вы получите строку "on", а для каждого сброшенного бита - "off" |
FIELD() | Индекс (позиция) первого аргумента в последующих аргументах |
FIND_IN_SET() | Индекс (позиция) первого аргумента внутри второго аргумента |
FORMAT() | Возвращает число, отформатированное до указанного количества десятичных знаков |
HEX() | Шестнадцатеричное представление десятичного или строкового значения |
INSERT() | Вставляет подстроку в указанную позицию до указанного количества символов |
INSTR() | Возвращает индекс первого вхождения подстроки |
LCASE() | Синоним для LOWER() |
LEFT() | Возвращает левую часть строки заданной длины |
LENGTH() | Возвращает длину строки в байтах |
LIKE | Простое сопоставление шаблонов |
LOAD_FILE() | Загружает файл с указанным именем |
LOCATE() | Возвращает позицию первого вхождения подстроки |
LOWER() | Возвращает аргумент в нижнем регистре |
LPAD() | Возвращает строку, дополненную слева указанной строкой |
LTRIM() | Удаляет начальные пробелы |
MAKE_SET() | Возвращает набор строк, разделенных запятыми, у которых соответствующий бит в bits установлен |
MATCH() | Выполняет полнотекстовый поиск |
MID() | Возвращает подстроку, начинающуюся с указанной позиции |
NOT LIKE | Отрицание простого сопоставления шаблонов |
NOT REGEXP | Отрицание REGEXP |
OCT() | Возвращает строку, содержащую восьмеричное представление числа |
OCTET_LENGTH() | Синоним для LENGTH() |
ORD() | Возвращает код символа для левого символа аргумента |
POSITION() | Синоним для LOCATE() |
QUOTE() | Экранирует аргумент для использования в SQL-запросе |
REGEXP | Соответствует ли строка регулярному выражению |
REGEXP_INSTR() | Начальный индекс подстроки, соответствующей регулярному выражению |
REGEXP_LIKE() | Соответствует ли строка регулярному выражению |
REGEXP_REPLACE() | Заменяет подстроки, соответствующие регулярному выражению |
REGEXP_SUBSTR() | Возвращает подстроку, соответствующую регулярному выражению |
REPEAT() | Повторяет строку заданное количество раз |
REPLACE() | Заменяет вхождения указанной строки |
REVERSE() | Обращает порядок символов в строке |
RIGHT() | Возвращает заданное количество правых символов |
RLIKE | Соответствует ли строка регулярному выражению |
RPAD() | Дополняет строку указанное количество раз |
RTRIM() | Удаляет конечные пробелы |
SOUNDEX() | Возвращает строку soundex |
SOUNDS LIKE | Сравнивает звучание |
SPACE() | Возвращает строку из указанного количества пробелов |
STRCMP() | Сравнивает две строки |
SUBSTR() | Возвращает подстроку по заданным параметрам |
SUBSTRING() | Возвращает подстроку по заданным параметрам |
SUBSTRING_INDEX() | Возвращает подстроку из строки до указанного количества вхождений разделителя |
TRIM() | Удаляет начальные и конечные пробелы |
UCASE() | Синоним для UPPER() |
UNHEX() | Возвращает строку, содержащую шестнадцатеричное представление числа |
UPPER() | Преобразовать в верхний регистр |
WEIGHT_STRING() | Возвращает строку веса для строки |
Функции, возвращающие строковые значения, возвращают NULL, если длина результата будет больше значения системной переменной max_allowed_packet. См. Раздел 7.1.1, «Настройка сервера».
Для функций, работающих с позициями строк, первая позиция имеет номер 1.
Для функций, принимающих аргументы длины, нецелые аргументы округляются до ближайшего целого.
-
Возвращает числовое значение самого левого символа строки
str. Возвращает0, еслиstrявляется пустой строкой. ВозвращаетNULL, еслиstrявляетсяNULL.ASCII()работает для 8-битных символов.mysql>
SELECT ASCII('2');-> 50 mysql>SELECT ASCII(2);-> 50 mysql>SELECT ASCII('dx');-> 100См. также функцию
ORD(). -
Возвращает строковое представление двоичного значения
N, гдеN— целое число типа longlong (BIGINT). Это эквивалентноCONV(. ВозвращаетN,10,2)NULL, еслиNявляетсяNULL.mysql>
SELECT BIN(12);-> '1100' -
Возвращает длину строки
strв битах. ВозвращаетNULL, еслиstrявляетсяNULL.mysql>
SELECT BIT_LENGTH('text');-> 32 -
CHAR(N,... [USINGcharset_name])CHAR()интерпретирует каждый аргументNкак целое число и возвращает строку, состоящую из символов, заданных кодовыми значениями этих целых чисел. ЗначенияNULLпропускаются.mysql>
SELECT CHAR(77,121,83,81,'76');+--------------------------------------------------+ | CHAR(77,121,83,81,'76') | +--------------------------------------------------+ | 0x4D7953514C | +--------------------------------------------------+ 1 row in set (0.00 sec) mysql>SELECT CHAR(77,77.3,'77.3');+--------------------------------------------+ | CHAR(77,77.3,'77.3') | +--------------------------------------------+ | 0x4D4D4D | +--------------------------------------------+ 1 row in set (0.00 sec)По умолчанию
CHAR()возвращает двоичную строку. Для создания строки в заданной кодировке используйте дополнительную клаузуUSING:mysql>
SELECT CHAR(77,121,83,81,'76' USING utf8mb4);+---------------------------------------+ | CHAR(77,121,83,81,'76' USING utf8mb4) | +---------------------------------------+ | MySQL | +---------------------------------------+ 1 row in set (0.00 sec) mysql>SELECT CHAR(77,77.3,'77.3' USING utf8mb4);+------------------------------------+ | CHAR(77,77.3,'77.3' USING utf8mb4) | +------------------------------------+ | MMM | +------------------------------------+ 1 row in set, 1 warning (0.00 sec) mysql>SHOW WARNINGS;+---------+------+-------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: '77.3' | +---------+------+-------------------------------------------+ 1 row in set (0.00 sec)Если
USINGзадана и результирующая строка недопустима для данной кодировки, выдаётся предупреждение. Также, если включён строгий режим SQL, результат отCHAR()становитсяNULL.Если
CHAR()вызывается из клиента mysql, двоичные строки отображаются в шестнадцатеричном формате, в зависимости от значения--binary-as-hex. Для получения дополнительной информации об этом параметре см. Раздел 6.5.1, «mysql — The MySQL Command-Line Client».Аргументы
CHAR()больше 255 преобразуются в несколько байтов результата. Например,CHAR(256)эквивалентноCHAR(1,0), аCHAR(256*256)эквивалентноCHAR(1,0,0):mysql>
SELECT HEX(CHAR(1,0)), HEX(CHAR(256));+----------------+----------------+ | HEX(CHAR(1,0)) | HEX(CHAR(256)) | +----------------+----------------+ | 0100 | 0100 | +----------------+----------------+ 1 row in set (0.00 sec) mysql>SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256));+------------------+--------------------+ | HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) | +------------------+--------------------+ | 010000 | 010000 | +------------------+--------------------+ 1 row in set (0.00 sec) -
Возвращает длину строки
str, измеренную в кодовых точках. Многобайтовый символ учитывается как одна кодовая точка. Это означает, что для строки, содержащей два символа по 3 байта,LENGTH()возвращает6, аCHAR_LENGTH()возвращает2, как показано ниже:mysql>
SET @dolphin:='海豚';Query OK, 0 rows affected (0.01 sec) mysql>SELECT LENGTH(@dolphin), CHAR_LENGTH(@dolphin);+------------------+-----------------------+ | LENGTH(@dolphin) | CHAR_LENGTH(@dolphin) | +------------------+-----------------------+ | 6 | 2 | +------------------+-----------------------+ 1 row in set (0.00 sec)CHAR_LENGTH()возвращаетNULL, еслиstrявляетсяNULL. -
CHARACTER_LENGTH()— синоним дляCHAR_LENGTH(). -
Возвращает строку, полученную путём конкатенации аргументов. Может иметь один или несколько аргументов. Если все аргументы — строки без бинарного представления, результат — строка без бинарного представления. Если аргументы включают бинарные строки, результат — бинарная строка. Числовой аргумент преобразуется в эквивалентную строку без бинарного представления.
CONCAT()возвращаетNULL, если любой из аргументов являетсяNULL.mysql>
SELECT CONCAT('My', 'S', 'QL');-> 'MySQL' mysql>SELECT CONCAT('My', NULL, 'QL');-> NULL mysql>SELECT CONCAT(14.3);-> '14.3'Для строковых литералов конкатенация может быть выполнена путём размещения строк рядом друг с другом:
mysql>
SELECT 'My' 'S' 'QL';-> 'MySQL'Если
CONCAT()вызывается из клиента mysql, результаты бинарных строк отображаются в шестнадцатеричном формате в зависимости от значения--binary-as-hex. Для получения дополнительной информации об этом параметре см. Раздел 6.5.1, «mysql — The MySQL Command-Line Client». -
CONCAT_WS(separator,str1,str2,...)CONCAT_WS()означает «Конкатенация со сепаратором» и является специальной формойCONCAT(). Первый аргумент — разделитель для остальных аргументов. Разделитель добавляется между конкатенируемыми строками. Разделитель может быть строкой, как и остальные аргументы. Если разделитель —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'CONCAT_WS()не пропускает пустые строки. Однако он пропускает любыеNULLзначения после аргумента разделителя. -
ELT()возвращаетN-й элемент списка строк:str1, еслиN=1,str2, еслиN=2, и так далее. ВозвращаетNULL, еслиNменьше1, больше, чем количество аргументов, илиNULL.ELT()— дополнение кFIELD().mysql>
SELECT ELT(1, 'Aa', 'Bb', 'Cc', 'Dd');-> 'Aa' mysql>SELECT ELT(4, 'Aa', 'Bb', 'Cc', 'Dd');-> 'Dd' -
EXPORT_SET(bits,on,off[,separator[,number_of_bits]])Возвращает строку, такую что для каждого установленного бита в значении
bitsвы получите строкуon, а для каждого не установленного бита — строкуoff. Биты вbitsрассматриваются справа налево (от младшего к старшему биту). Строки добавляются в результат слева направо, разделённые строкойseparator(по умолчанию — запятая,). Количество рассматриваемых битов задаётсяnumber_of_bits, которое по умолчанию равно 64, если не указано другое значение.number_of_bitsнеявно обрезается до 64, если больше. Оно обрабатывается как беззнаковое целое число, поэтому значение −1 фактически равно 64.mysql>
SELECT EXPORT_SET(5,'Y','N',',',4);-> 'Y,N,Y,N' mysql>SELECT EXPORT_SET(6,'1','0',',',10);-> '0,1,1,0,0,0,0,0,0,0' -
Возвращает индекс (позицию)
strв спискеstr1,str2,str3,.... Возвращает0, еслиstrне найдено.Если все аргументы для
FIELD()— строки, все аргументы сравниваются как строки. Если все аргументы — числа, они сравниваются как числа. В противном случае аргументы сравниваются как числа с плавающей точкой.Если
strявляетсяNULL, возвращаемое значение —0, так какNULLне проходит сравнение на равенство ни с каким значением.FIELD()— дополнение кELT().mysql>
SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');-> 2 mysql>SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');-> 0
-
Возвращает значение в диапазоне от 1 до
N, если строкаstrсодержится в списке строкstrlist, состоящем изNподстрок. Список строк — это строка, состоящая из подстрок, разделённых символами,. Если первый аргумент является константной строкой, а второй — столбцом типаSET, функцияFIND_IN_SET()оптимизирована для использования битовых операций. Возвращает0, еслиstrне содержится вstrlistили еслиstrlistявляется пустой строкой. ВозвращаетNULL, если любой из аргументов являетсяNULL. Эта функция может работать некорректно, если первый аргумент содержит запятую (,).mysql>
SELECT FIND_IN_SET('b','a,b,c,d');-> 2 -
Форматирует число
Xв формате, подобном'#,###,###.##', округляя его доDдесятичных знаков, и возвращает результат в виде строки. ЕслиDравно0, результат не содержит десятичной точки или дробной части. ЕслиXилиDравноNULL, функция возвращаетNULL.Необязательный третий параметр позволяет указать локаль, которая будет использоваться для десятичной точки, разделителя тысяч и группировки разделителей в результирующем числе. Допустимые значения локали совпадают с допустимыми значениями системной переменной
lc_time_names(см. Раздел 12.16, «Поддержка локали в MySQL Server»). Если локаль равнаNULLили не указана, используется локаль по умолчанию —'en_US'.mysql>
SELECT FORMAT(12332.123456, 4);-> '12,332.1235' mysql>SELECT FORMAT(12332.1,4);-> '12,332.1000' mysql>SELECT FORMAT(12332.2,0);-> '12,332' mysql>SELECT FORMAT(12332.2,2,'de_DE');-> '12.332,20' -
Принимает строку, закодированную с использованием правил кодирования base-64, применяемых функцией
TO_BASE64(), и возвращает декодированный результат в виде двоичной строки. Результатом являетсяNULL, если аргумент равенNULLили не является корректной строкой base-64. Подробности о правилах кодирования и декодирования см. в описании функцииTO_BASE64().mysql>
SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));-> 'JWJj', 'abc'Если функция
FROM_BASE64()вызывается из клиента mysql, двоичные строки отображаются в шестнадцатеричном формате. Вы можете отключить это поведение, установив значение системной переменной--binary-as-hexна значение0при запуске клиента mysql. Дополнительную информацию об этом параметре см. в Разделе 6.5.1, «mysql — Клиентская утилита командной строки MySQL». -
Для строкового аргумента
str, функцияHEX()возвращает шестнадцатеричное строковое представлениеstr, где каждый байт каждого символа вstrпреобразуется в две шестнадцатеричные цифры. (Многобайтовые символы, следовательно, занимают более двух цифр.) Обратной операцией является функцияUNHEX().Для числового аргумента
N, функцияHEX()возвращает шестнадцатеричное строковое представление значенияN, интерпретируемого как целое число типа longlong (BIGINT). Это эквивалентноCONV(. Обратная операция выполняется функциейN,10,16)CONV(HEX(.N),16,10)Для аргумента типа
NULLфункция возвращаетNULL.mysql>
SELECT X'616263', HEX('abc'), UNHEX(HEX('abc'));-> 'abc', 616263, 'abc' mysql>SELECT HEX(255), CONV(HEX(255),16,10);-> 'FF', 255 -
Возвращает строку
str, в которой подстрока, начинающаяся с позицииposи имеющая длинуlenсимволов, заменяется строкойnewstr. Возвращает исходную строку, еслиposне находится внутри длины строки. Заменяет остальную часть строки с позицииpos, еслиlenне находится внутри длины оставшейся части строки. ВозвращаетNULL, если любой из аргументов являетсяNULL.mysql>
SELECT INSERT('Quadratic', 3, 4, 'What');-> 'QuWhattic' mysql>SELECT INSERT('Quadratic', -1, 4, 'What');-> 'Quadratic' mysql>SELECT INSERT('Quadratic', 3, 100, 'What');-> 'QuWhat'Функция безопасна для многобайтовых строк.
-
Возвращает позицию первого вхождения подстроки
substrв строкеstr. Это то же самое, что и двухаргументная форма функцииLOCATE(), за исключением того, что порядок аргументов изменён.mysql>
SELECT INSTR('foobarbar', 'bar');-> 4 mysql>SELECT INSTR('xbar', 'foobar');-> 0Функция безопасна для многобайтовых строк и регистрозависима только если хотя бы один из аргументов является двоичной строкой. Если любой из аргументов равен
NULL, функция возвращаетNULL. -
LCASE()является синонимом дляLOWER().LCASE(), используемое в представлении, переписывается какLOWER()при сохранении определения представления. (Ошибка #12844279) -
Возвращает левые
lenсимволов из строкиstrилиNULL, если любой из аргументов равенNULL.mysql>
SELECT LEFT('foobarbar', 5);-> 'fooba'Функция безопасна для многобайтовых строк.
-
Возвращает длину строки
str, измеряемую в байтах. Многобайтовый символ считается несколькими байтами. Это означает, что для строки, содержащей пять 2-байтовых символов, функцияLENGTH()возвращает10, в то время какCHAR_LENGTH()возвращает5. ВозвращаетNULL, еслиstrравноNULL.mysql>
SELECT LENGTH('text');-> 4ПримечаниеОткрыто-пространственная функция OpenGIS,
Length(), в MySQL называетсяST_Length(). -
Читает файл и возвращает содержимое файла в виде строки. Для использования этой функции файл должен находиться на серверном хосте, необходимо указать полный путь к файлу, и у вас должны быть привилегии
FILE. Файл должен быть доступен для чтения сервером, и его размер должен быть меньше, чемmax_allowed_packetбайт. Если системная переменнаяsecure_file_privустановлена на непустое имя директории, файл, который нужно загрузить, должен находиться в этой директории.Если файла не существует или он не может быть прочитан из-за нарушения одного из вышеперечисленных условий, функция возвращает
NULL.Системная переменная
character_set_filesystemуправляет интерпретацией имён файлов, заданных в виде литералов.mysql>
UPDATE tSET blob_col=LOAD_FILE('/tmp/picture')WHERE id=1;
-
LOCATE(,substr,str)LOCATE(substr,str,pos)Первый синтаксис возвращает позицию первого вхождения подстроки
substrв строкеstr. Второй синтаксис возвращает позицию первого вхождения подстрокиsubstrв строкеstr, начиная с позицииpos. Возвращает0, еслиsubstrне находится вstr. ВозвращаетNULL, если любой аргумент являетсяNULL.mysql>
SELECT LOCATE('bar', 'foobarbar');-> 4 mysql>SELECT LOCATE('xbar', 'foobar');-> 0 mysql>SELECT LOCATE('bar', 'foobarbar', 5);-> 7Эта функция безопасна для многобайтовых символов и чувствительна к регистру только в том случае, если хотя бы один аргумент является бинарной строкой.
-
Возвращает строку
strсо всеми символами, переведенными в нижний регистр в соответствии с текущим сопоставлением символов, илиNULL, еслиstrявляетсяNULL. Кодировка по умолчанию —utf8mb4.mysql>
SELECT LOWER('QUADRATICALLY');-> 'quadratically'LOWER()(иUPPER()) неэффективны при применении к бинарным строкам (BINARY,VARBINARY,BLOB). Чтобы выполнить преобразование регистра бинарной строки, сначала преобразуйте её в небинарную строку, используя кодировку, подходящую для данных, хранящихся в строке:mysql>
SET @str = BINARY 'New York';mysql>SELECT LOWER(@str), LOWER(CONVERT(@str USING utf8mb4));+-------------+------------------------------------+ | LOWER(@str) | LOWER(CONVERT(@str USING utf8mb4)) | +-------------+------------------------------------+ | New York | new york | +-------------+------------------------------------+Для сортировок наборов символов Unicode,
LOWER()иUPPER()работают в соответствии с версией алгоритма сортировки Unicode (UCA) в имени сортировки, если таковая имеется, и UCA 4.0.0, если версия не указана. Например,utf8mb4_0900_ai_ciиutf8mb3_unicode_520_ciработают в соответствии с UCA 9.0.0 и 5.2.0 соответственно, тогда какutf8mb3_unicode_ciработает в соответствии с UCA 4.0.0. См. Раздел 12.10.1, «Наборы символов Unicode».Эта функция безопасна для многобайтовых символов.
LCASE(), используемый в представлениях, переписывается какLOWER(). -
Возвращает строку
str, дополненную слева строкойpadstrдо длиныlenсимволов. Еслиstrдлиннее, чемlen, возвращаемое значение сокращается доlenсимволов.mysql>
SELECT LPAD('hi',4,'??');-> '??hi' mysql>SELECT LPAD('hi',1,'??');-> 'h'Возвращает
NULL, если любой из его аргументов являетсяNULL. -
Возвращает строку
strс удаленными ведущими пробелами. ВозвращаетNULL, еслиstrявляетсяNULL.mysql>
SELECT LTRIM(' barbar');-> 'barbar'Эта функция безопасна для многобайтовых символов.
-
Возвращает значение множества (строку, содержащую подстроки, разделенные символами
,), состоящее из строк, у которых соответствующий бит вbitsустановлен.str1соответствует биту 0,str2— биту 1 и так далее.NULLзначения в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(1 | 4,'hello','nice',NULL,'world');-> 'hello' mysql>SELECT MAKE_SET(0,'a','b','c');-> '' -
MID(,str,pos)MID(,strFROMpos)MID(,str,pos,len)MID(strFROMposFORlen)MID(является синонимом дляstr,pos,len)SUBSTRING(.str,pos,len) -
Возвращает строковое представление восьмеричного значения
N, гдеN— число типа longlong (BIGINT). Это эквивалентноCONV(. ВозвращаетN,10,8)NULL, еслиNявляетсяNULL.mysql>
SELECT OCT(12);-> '14' -
OCTET_LENGTH()является синонимом дляLENGTH(). -
Если самый левый символ строки
strявляется многобайтовым символом, возвращает код этого символа, вычисленный из числовых значений его составляющих байтов по этой формуле:(1st byte code) + (2nd byte code * 256) + (3rd byte code * 256^2) ...
Если самый левый символ не является многобайтовым символом,
ORD()возвращает то же значение, что и функцияASCII(). Функция возвращаетNULL, еслиstrявляетсяNULL.mysql>
SELECT ORD('2');-> 50 -
POSITION(является синонимом дляsubstrINstr)LOCATE(.substr,str) -
Заключает строку в кавычки, чтобы получить результат, который может использоваться как правильно экранированное значение данных в операторе SQL. Строка возвращается, заключенная в одинарные кавычки, и с каждым экземпляром обратного слеша (
\), одинарной кавычки ('), ASCIINULи Control+Z, предшествующих обратному слешу. Если аргумент являетсяNULL, возвращаемым значением является слово “NULL” без заключительных одинарных кавычек.mysql>
SELECT QUOTE('Don\'t!');-> 'Don\'t!' mysql>SELECT QUOTE(NULL);-> NULLДля сравнения см. правила кавычек для литеральных строк и в C API в Разделе 11.1.1, «Литеральные строки», и .
-
Возвращает строку, состоящую из строки
str, повтореннойcountраз. Еслиcountменьше 1, возвращает пустую строку. ВозвращаетNULL, еслиstrилиcountявляетсяNULL.mysql>
SELECT REPEAT('MySQL', 3);-> 'MySQLMySQLMySQL' -
Возвращает строку
strсо всеми вхождениями строкиfrom_str, замененными строкойto_str.REPLACE()выполняет поискfrom_strс учетом регистра.mysql>
SELECT REPLACE('www.mysql.com', 'w', 'Ww');-> 'WwWwWw.mysql.com'Эта функция безопасна для многобайтовых символов. Она возвращает
NULL, если любой из её аргументов являетсяNULL. -
Возвращает строку
strс обратным порядком символов илиNULL, еслиstrявляетсяNULL.mysql>
SELECT REVERSE('abc');-> 'cba'Эта функция безопасна для многобайтовых символов.
-
Возвращает самые правые
lenсимволов из строкиstrилиNULL, если любой аргумент являетсяNULL.mysql>
SELECT RIGHT('foobarbar', 4);-> 'rbar'Эта функция безопасна для многобайтовых символов.
-
Возвращает строку
str, дополненную справа строкойpadstrдо длиныlenсимволов. Еслиstrдлиннееlen, возвращаемое значение укорачивается доlenсимволов. Еслиstr,padstrилиlenимеют значениеNULL, функция возвращаетNULL.mysql>
SELECT RPAD('hi',5,'?');-> 'hi???' mysql>SELECT RPAD('hi',1,'?');-> 'h'Эта функция безопасна для многобайтовых символов.
-
Возвращает строку
strсо всеми символами пробела в конце удалёнными.mysql>
SELECT RTRIM('barbar ');-> 'barbar'Эта функция безопасна для многобайтовых символов и возвращает
NULL, еслиstrимеет значениеNULL. -
Возвращает строку Soundex для
strилиNULL, еслиstrимеет значениеNULL. Две похожие по звучанию строки должны иметь идентичные строки Soundex. Стандартная строка Soundex имеет длину четыре символа, но функцияSOUNDEX()возвращает строку произвольной длины. Для получения стандартной строки Soundex можно использовать функциюSUBSTRING()над результатом. Все неалфавитные символы вstrигнорируются. Все международные алфавитные символы вне диапазона A-Z обрабатываются как гласные.ВажноПри использовании
SOUNDEX()необходимо учитывать следующие ограничения:Эта функция, в текущей реализации, предназначена для работы со строками только на английском языке. Строки на других языках могут не давать надёжных результатов.
Эта функция не гарантирует согласованных результатов со строками, использующими многобайтовые наборы символов, включая
utf-8. Смотрите ошибку #22638 для получения дополнительной информации.
mysql>
SELECT SOUNDEX('Hello');-> 'H400' mysql>SELECT SOUNDEX('Quadratically');-> 'Q36324'ПримечаниеЭта функция реализует оригинальный алгоритм Soundex, а не более популярную улучшенную версию (также описанную Д. Кнутом). Разница заключается в том, что оригинальная версия сначала отбрасывает гласные, а затем дубликаты, тогда как улучшенная версия сначала отбрасывает дубликаты, а затем гласные.
-
Это то же самое, что и
SOUNDEX(.expr1) = SOUNDEX(expr2) -
Возвращает строку, состоящую из
Nсимволов пробела, илиNULL, еслиNимеет значениеNULL.mysql>
SELECT SPACE(6);-> ' ' -
SUBSTR(,str,pos)SUBSTR(,strFROMpos)SUBSTR(,str,pos,len)SUBSTR(strFROMposFORlen)SUBSTR()является синонимом дляSUBSTRING(). -
SUBSTRING(,str,pos)SUBSTRING(,strFROMpos)SUBSTRING(,str,pos,len)SUBSTRING(strFROMposFORlen)Формы без аргумента
lenвозвращают подстроку из строкиstr, начиная с позицииpos. Формы с аргументомlenвозвращают подстроку длинойlenсимволов из строкиstr, начиная с позицииpos. Формы, использующиеFROM, соответствуют стандартной синтаксической конструкции SQL. Также можно использовать отрицательное значение дляpos. В этом случае начало подстроки определяетсяposсимволами с конца строки, а не с начала. Отрицательное значение может быть использовано дляposв любой форме этой функции. Значение 0 дляposвозвращает пустую строку.Для всех форм
SUBSTRING()позиция первого символа строки, из которой должна быть извлечена подстрока, считается1.mysql>
SELECT SUBSTRING('Quadratically',5);-> 'ratically' mysql>SELECT SUBSTRING('foobarbar' FROM 4);-> 'barbar' mysql>SELECT SUBSTRING('Quadratically',5,6);-> 'ratica' mysql>SELECT SUBSTRING('Sakila', -3);-> 'ila' mysql>SELECT SUBSTRING('Sakila', -5, 3);-> 'aki' mysql>SELECT SUBSTRING('Sakila' FROM -4 FOR 2);-> 'ki'Эта функция безопасна для многобайтовых символов. Она возвращает
NULL, если любой из её аргументов имеет значениеNULL.Если
lenменьше 1, результатом является пустая строка. -
SUBSTRING_INDEX(str,delim,count)Возвращает подстроку из строки
strдоcountвхождений разделителяdelim. Еслиcountположительно, возвращается всё слева от последнего разделителя (считая слева). Еслиcountотрицательно, возвращается всё справа от последнего разделителя (считая справа).SUBSTRING_INDEX()выполняет поискdelimс учётом регистра.mysql>
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);-> 'www.mysql' mysql>SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);-> 'mysql.com'Эта функция безопасна для многобайтовых символов.
SUBSTRING_INDEX()возвращаетNULL, если любой из аргументов имеет значениеNULL. -
Преобразует строковый аргумент в базу-64 кодировку и возвращает результат как строку символов с набором кодировки соединения и сортировкой. Если аргумент не является строкой, он преобразуется в строку перед преобразованием. Результатом будет
NULL, если аргумент имеет значениеNULL. Базы-64 кодированные строки могут быть декодированы с помощью функцииFROM_BASE64().mysql>
SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));-> 'JWJj', 'abc'Существуют различные схемы кодирования Base-64. Вот правила кодирования и декодирования, используемые
TO_BASE64()иFROM_BASE64():Кодирование для значения алфавита 62 —
'+'.Кодирование для значения алфавита 63 —
'/'.Кодированный вывод состоит из групп по 4 печатных символов. Каждые 3 байта входных данных кодируются с использованием 4 символов. Если последняя группа неполная, она дополняется
'='символами до длины 4.После каждых 76 символов кодированного вывода добавляется символ новой строки, чтобы разделить длинный вывод на несколько строк.
Декодирование распознаёт и игнорирует символ новой строки, возврат каретки, табуляцию и пробелы.
-
TRIM([{BOTH | LEADING | TRAILING} [,remstr] FROM]str)TRIM([remstrFROM]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'Эта функция безопасна для многобайтовых символов. Она возвращает
NULL, если любой из аргументов имеет значениеNULL. -
UCASE()является синонимом дляUPPER().UCASE(), используемое внутри представлений, переписывается какUPPER().
-
Для строкового аргумента
str,UNHEX(интерпретирует каждую пару символов в аргументе как шестнадцатеричное число и преобразует его в байт, представленный этим числом. Возвращаемое значение — двоичная строка.str)mysql>
SELECT UNHEX('4D7953514C');-> 'MySQL' mysql>SELECT X'4D7953514C';-> 'MySQL' mysql>SELECT UNHEX(HEX('string'));-> 'string' mysql>SELECT HEX(UNHEX('1267'));-> '1267'Символы в строковом аргументе должны быть допустимыми шестнадцатеричными цифрами:
'0'..'9','A'..'F','a'..'f'. Если аргумент содержит любые недопустимые шестнадцатеричные цифры или являетсяNULL, результатом будетNULL:mysql>
SELECT UNHEX('GG');+-------------+ | UNHEX('GG') | +-------------+ | NULL | +-------------+ mysql>SELECT UNHEX(NULL);+-------------+ | UNHEX(NULL) | +-------------+ | NULL | +-------------+Результат
NULLтакже может возникнуть, если аргумент функцииUNHEX()является столбцом типаBINARY, потому что значения заполняются0x00байтами при хранении, но эти байты не удаляются при извлечении. Например,'41'хранится в столбце типаCHAR(3)как'41 'и извлекается как'41'(с удаленным trailing-пробелом), поэтомуUNHEX()для значения столбца возвращаетX'41'. В противоположность этому,'41'хранится в столбце типаBINARY(3)как'41\0'и извлекается как'41\0'(с trailing-пробелом0x00байтом, не удалённым).'\0'не является допустимой шестнадцатеричной цифрой, поэтомуUNHEX()для значения столбца возвращаетNULL.Для числового аргумента
Nобратная функцияHEX(не выполняется функциейN)UNHEX(). Используйте функциюCONV(HEX(вместо этого. См. описаниеN),16,10)HEX().Если
UNHEX()вызывается из клиента mysql, двоичные строки отображаются в шестнадцатеричном формате, в зависимости от значения параметра--binary-as-hex. Дополнительную информацию об этом параметре см. в разделе 6.5.1, «mysql — Клиентская утилита командной строки MySQL». -
Возвращает строку
strсо всеми символами, преобразованными в верхний регистр в соответствии с текущим отображением набора символов, илиNULL, еслиstrявляетсяNULL. По умолчанию набор символов —utf8mb4.mysql>
SELECT UPPER('Hej');-> 'HEJ'См. описание
LOWER()для информации, которая также относится кUPPER(). Включая информацию о том, как выполнять преобразование регистра двоичных строк (BINARY,VARBINARY,BLOB), для которых эти функции неэффективны, и информация о свертке регистра для наборов символов Unicode.Эта функция безопасна для многобайтовых символов.
UCASE(), используемый внутри представлений, переписывается какUPPER(). -
WEIGHT_STRING(str[AS {CHAR|BINARY}(N)] [flags])Эта функция возвращает строку весов для входной строки. Возвращаемое значение — двоичная строка, представляющая значение сравнения и сортировки строки, или
NULL, если аргумент являетсяNULL. Имеет следующие свойства:Если
WEIGHT_STRING(=str1)WEIGHT_STRING(, тоstr2)(str1=str2str1иstr2считаются равными)Если
WEIGHT_STRING(<str1)WEIGHT_STRING(, тоstr2)(str1<str2str1сортируется передstr2)
WEIGHT_STRING()— функция отладки, предназначенная для внутреннего использования. Её поведение может меняться без предварительного уведомления между версиями MySQL. Она может использоваться для тестирования и отладки сортировок, особенно при добавлении нового типа сортировки. См. раздел 12.14, «Добавление сортировки к набору символов».Данный список кратко обобщает аргументы. Более подробные сведения приведены в обсуждении, следующем за списком.
str: Входная строковая выражение.ASпредложение: Необязательно; преобразует входную строку в указанный тип и длину.flags: Необязательно; не используется.
Входная строка
str— это строковое выражение. Если вход — строка без типа байтов (символьная), например, значение типаCHAR,VARCHARилиTEXT, возвращаемое значение содержит веса сортировки для строки. Если вход — двоичная строка (байтовая), например, значение типаBINARY,VARBINARYилиBLOB, возвращаемое значение такое же, как входное (вес каждого байта в двоичной строке — это значение байта). Если вход —NULL,WEIGHT_STRING()возвращаетNULL.Примеры:
mysql>
SET @s = _utf8mb4 'AB' COLLATE utf8mb4_0900_ai_ci;mysql>SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));+------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | AB | 4142 | 1C471C60 | +------+---------+------------------------+mysql>
SET @s = _utf8mb4 'ab' COLLATE utf8mb4_0900_ai_ci;mysql>SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));+------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | ab | 6162 | 1C471C60 | +------+---------+------------------------+mysql>
SET @s = CAST('AB' AS BINARY);mysql>SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));+------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | AB | 4142 | 4142 | +------+---------+------------------------+mysql>
SET @s = CAST('ab' AS BINARY);mysql>SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));+------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | ab | 6162 | 6162 | +------+---------+------------------------+В предыдущих примерах используется функция
HEX()для отображения результатаWEIGHT_STRING(). Поскольку результат — двоичное значение,HEX()может быть особенно полезным, когда результат содержит непечатные символы, для отображения в печатном формате:mysql>
SET @s = CONVERT(X'C39F' USING utf8mb4) COLLATE utf8mb4_czech_ci;mysql>SELECT HEX(WEIGHT_STRING(@s));+------------------------+ | HEX(WEIGHT_STRING(@s)) | +------------------------+ | 0FEA0FEA | +------------------------+Для значений, отличных от
NULL, тип данных значения —VARBINARY, если его длина находится в пределах максимальной длины дляVARBINARY, в противном случае тип данных —BLOB.Предложение
ASможет быть использовано для преобразования входной строки в строку без типа байтов или строку типа байтов и для принудительного указания заданной длины:AS CHAR(преобразует строку в строку без типа байтов и дополняет её справа пробелами до длиныN)Nсимволов.Nдолжно быть не меньше 1. ЕслиNменьше длины входной строки, строка усекается доNсимволов. Предупреждение при усечении не выводится.AS BINARY(аналогичен, но преобразует строку в двоичную строку,N)Nизмеряется в байтах (а не символах), и дополнение использует0x00байтов (а не пробелов).
mysql>
SET NAMES 'latin1';mysql>SELECT HEX(WEIGHT_STRING('ab' AS CHAR(4)));+-------------------------------------+ | HEX(WEIGHT_STRING('ab' AS CHAR(4))) | +-------------------------------------+ | 41422020 | +-------------------------------------+ mysql>SET NAMES 'utf8mb4';mysql>SELECT HEX(WEIGHT_STRING('ab' AS CHAR(4)));+-------------------------------------+ | HEX(WEIGHT_STRING('ab' AS CHAR(4))) | +-------------------------------------+ | 1C471C60 | +-------------------------------------+mysql>
SELECT HEX(WEIGHT_STRING('ab' AS BINARY(4)));+---------------------------------------+ | HEX(WEIGHT_STRING('ab' AS BINARY(4))) | +---------------------------------------+ | 61620000 | +---------------------------------------+Предложение
flagsв настоящее время не используется.Если
WEIGHT_STRING()вызывается из клиента mysql, двоичные строки отображаются в шестнадцатеричном формате, в зависимости от значения параметра--binary-as-hex. Дополнительную информацию об этом параметре см. в разделе 6.5.1, «mysql — Клиентская утилита командной строки MySQL».
© 2025 Oracle
Licensed under the GPLv2 License.