Навигация

Поиск по Сайту

Партнеры

Самоучитель. Книги.

Статистика

    Каталог@Mail.ru - каталог ресурсов интернет

Урок 6.6: Строковые функции в MySQL

Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Строковые функции в MySQL

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

Для функций, которые оперируют позициями в строке, первая позиция всегда пронумерована как 1, а не 0.


ASCII(str)

Возвращает ASCII-код крайнего левого символа строки str. Вернет 0, если str пустая. Вернет NULL, если str равна NULL:

mysql> select ASCII("2");
    -> 50.
mysql> select ASCII(2);
    ->50
mysql> select ASCII("dx");
    -> 100

ORD(str)

Если крайний левый символ строки str представляет собой многобайтный символ, возвращает код символа, возвращая ASCII-значение кода символа в формате: ((первый байт ASCII-кода)*256 + (второй байт ASCII-кода))[*256 + третий байт ASCII-кода +...]. Если крайний левый символ не является многобайтным, действует аналогично функции ASCII():

mysql> select ORD("2");
    -> 50

(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 C0NV(-17,10,-18);
    -> "-H"
mysql> select CONV(10+»10"+'10'+0xa,10,10);
    -> "40"

BIN(N)

Возвращает строковое представление двоичного значения N, где N представляет собой число типа longlong (BIGINT). Это эквивалентно CONV(N,10,2). Возвращает NULL, если N равно NULL:

mysql> select BIN(12);
    -> “1100"

OCT(N)

Возвращает строковое представление восьмеричного значения N, где N представляет собой число типа longlong (BIGINT). Это эквивалентно C0NV(N,10,8). Возвращает NULL, если N равно NULL:

mysql> select OCT(12);
    -> "14"

HEX(N)

Возвращает строковое представление шестнадцатеричного значения N, где N представляет собой число типа longlong (BIGINT). Это эквивалентно CONV (N,10,16). Возвращает NULL, если N равно NULL:

mysql> select НЕХ(255);
    -> "FF"

CHAR(N,. . .).

CHAR() интерпретируют параметры как целые числа и возвращает строку, состоящую из символов, заданных значениями ASCII-кодов из тех целых чисел. Значения NULL будут пропущены:

mysql> select CHAR(77,121,83,81,'76');
    -> "MySQL"
mysql> select CHAR(77,77.3,'77.3');
    -> "МММ"

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. Разделитель будет добавлен между строками, которые нужно объединить в одну целую:

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() любой многобайтный символ считается одним.


LOCATE(substr,str), POSITION(substr IN str), LOCATE(substr,str) или POSITION(substr IN str)

Возвращает позицию первого местонахождения подстроки substr в строке str. Если не нашла substr в str, вернет 0:

mysql> select LOCATE("bar", "foobarbar");
    -> 4
mysql> select LOCATE("xbar", "foobar");
    -> 0

Поддерживаются многобайтные символы.


LOCATE(substr,str,pos).

Возвращает позицию первого местонахождения подстроки substr в строке str, после позиции pos. Если не нашла substr в str, вернет 0:

mysql> select LOCATE("bar", "foobarbar",5);
    -> 7

Поддерживаются многобайтные символы.


INSTR(str,substr)

Аналог LOCATE(), но с переставленными параметрами:

mysql> select INSTR("foobarbar", "bar");
    -> 4
mysql> select INSTR("xbar", "foobar");
    -> 0

Поддерживаются многобайтные символы.


LPAD(str,len,padstr)

Возвращает строку str, дополненную слева строкой padstr. Максимальная длина str равна len символам. Если str длиннее, чем len, она будет урезана до len символов. Если str короче, чем len символы, padstr будет приписана несколько раз.

mysql> select LPAD("hi",4,'??');
    -> "??hi"

RPAD (str,len,padstr)

Аналогично LPAD(str,len,padstr), но строка padstr приписывается справа.

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, будут удалены пробелы. Параметр LEADING определяет префиксы, TRAILING суффиксы, a BOTH все сразу:

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)

Возвращает soundex-строку из строки str. Это некий подвид кодировки строк, в общем пригодный для проверки сходства данных. Две строки, которые звучат почти одинаково, должны иметь идентичные soundex-строки.

Стандартная soundex-строка в длину составляет 4 символа, но функция SOUNDEX() возвращает произвольно длинную строку. Вы можете использовать SUBSTRING() на результате, чтобы получить стандартную soundex-строку. Все не алфавитно-цифровые символы игнорируются в данной строке. Все международные алфавитные символы вне диапазона 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, возвращает пустую строку. Если str или count равны NULL, вернет 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 и так далее. Возвращает NULL, если N меньше, чем 1, или больше, чем число параметров. 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 Вернет 0, если str не найдена. 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, если любой параметр NULL. Эта функция не будет работать правильно, если первый параметр содержит запятую:

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

MAKE_SET (bits, str1 str2, ...)

Возвращает строку, содержащую подстроки, отделяемые запятой (,), состоящую из строк, которые имеют соответствующий бит в наборе bits.str1 соответствует биту 0, str2 биту 1 итак далее. NULL в str1, str2, ... не попадут в результат:

mysql> SELECT MAKE_SET(1,'а','b','с');
    -> "а"
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]])

Возвращает строку, где для каждого бита, установленного в наборе bit, вы получите строку, заданную параметром on, а для каждого неустановленного, соответственно, строку, определенную параметром off. Каждая строка отделяется от других разделителем (параметр separator, по умолчанию это запятая) и используется только “number_of_bits” бит (по умолчанию 64):

mysql> select EXPORT_SET(5,'У','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 table_name SET blob_column=LOAD_FILE(«/tmp/picture») WHERE id=1;

MySQL по мере необходимости автоматически преобразует числа в строки и наоборот:

mysql> SELECT 1+»1";
    -> 2
mysql> SELECT CONCAT(2,' test’);
    -> “2 test”

Если вы хотите преобразовывать число в строку явно, передайте его как параметр функции CONCAT().

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