Search the MySQL manual:
Subscribe to the monthly
MySQL Newsletter!

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

Строковые функции возвращают NULL, если длина результата оказывается больше, чем указано в значении серверного параметра max_allowed_packet. See section 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++ можно найти на http://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().

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

Главы

User Comments

Posted by [name withheld] on May 17 2002 6:24am[Delete] [Edit]

It appears that something like this does not work:\n

SELECT CASE c.flag_user WHEN 0 THEN 0 WHEN 1 THEN 2 ELSE 1 END AS myflag\n
FROM bi_clones c, bi_hits h WHERE h.clone = c.id ORDER BY c.name LIMIT 0, 50
\n
In this example, myflag will be 0 even if flag_user is 1. However, when there is no join,
the query works as expected. I.e.
\n
SELECT CASE c.flag_user WHEN 0 THEN 0 WHEN 1 THEN 2 ELSE 1 END AS myflag\n
FROM bi_clones c ORDER BY c.name LIMIT 0, 50
\n
produces the same result as
\n
SELECT IF(c.flag_user,IF(c.flag_user-1,1,2),0) AS myflag\n
FROM bi_clones c ORDER BY c.name LIMIT 0, 50
\n
The manual doesn't state the CASE only works for SELECTS on one
table, so I suppose I might have stumbled upon a bug of some sort.
Luckily it's easy to replace CASE with IF() wherever needed.

Posted by Duncan on December 18 2002 5:27pm[Delete] [Edit]

the min and max arguments to BETWEEN mean it.
contrary to english usage,
select 5 between 4 and 6 ; (1) is not equal to
select 5 between 6 and 4 ; (0)
the optimizer neither sorts the operands nor
catches the always-false case.
mysql> select id from speed where stamp between 6
and 4 ;
Empty set (28.51 sec)
(3 million records in table, server version
3.23.42-nt)

Posted by Jonny Prouty on September 4 2002 11:56am[Delete] [Edit]

I found a simple little way of converting a string to
an int in version 3.23. CONV(N, 10, 10) where N is
the
string. I had to use this because when i tried to
return SUM(varchar_column), it would funkify the
data. the string '1' got converted
to '1.00000071246087'. SUM(CONV
(varchar_column, 10, 10)) seems to work fine
though. it leaves '1' as '1'.

Posted by Andrew Montgomery on January 26 2003 1:23pm[Delete] [Edit]

If you are having trouble uploading a file via PHP into a MySQL database, you must use PHP's chmod command to change the permissions on the uploaded file. For example:
chmod($_FILES['myfield']['tmp_name'],0644);
This will allow the mysqld user (the unix user of the mysql daemon process, not the mysql user) to read the file. Also don't forget to set the FILE permission on the mysql user.

Posted by [name withheld] on July 18 2003 7:31am[Delete] [Edit]

SUBSTRING_INDEX is case sensitive. This should be in the manual.

Posted by [name withheld] on July 24 2003 8:08am[Delete] [Edit]

Nice feature would be something that will work as || for Oracle or + in SQL Server to concatenate two strings.

Posted by Ross Smith on August 18 2003 7:42pm[Delete] [Edit]

For some reason, HEX() doesn't seem to work with 3.23.49:

mysql> select HEX("abc"),VERSION();

+------------+-------------+
| HEX("abc") | VERSION() |
+------------+-------------+
| 0 | 3.23.49-log |
+------------+-------------+

HEX() on strings must have been introduced after 3.23.49. I would suggest updating the docs to reflect this, and removing this comment, as not everyone will read these comments.

Posted by [name withheld] on November 10 2003 4:10pm[Delete] [Edit]

the ip thing... column with ip address "ip" and table "comp_systems" - should give 4 separate columns, each with 3-padded numbers. i guess you could do something else to join all of them togther...

SELECT
LPAD( SUBSTRING( ip, 1, locate( '.', ip ) - 1 - 0 ) , 3, '0' ) ,
LPAD( SUBSTRING( ip, locate( '.', ip ) + 1, ( locate( '.', ip, locate( '.', ip ) + 1 ) + 1 ) - ( locate( '.', ip ) + 1 ) - 1 ) , 3, '0' ),
LPAD( SUBSTRING( ip, locate( '.', ip, locate( '.', ip ) + 1 ) + 1, ( locate( '.', ip, locate( '.', ip, locate( '.', ip ) + 1 ) + 1 ) + 1 ) - ( locate( '.', ip, locate( '.', ip ) + 1 ) + 1 ) - 1 ) , 3, '0' ),
LPAD( SUBSTRING( ip, locate( '.', ip, locate( '.', ip, locate( '.', ip ) + 1 ) + 1 ) + 1, LENGTH( ip ) ) , 3, '0' )
FROM comp_systems

Posted by Patrick Allaert on December 12 2003 1:35am[Delete] [Edit]

NEVER store IPV4 addresses in a CHAR(15) or VARCHAR(15) !
Use instead the INTEGER (4 bytes) type. To convert your ip from text to a 4 byte number, use inet_aton function (inet_ntoa function reverse the operation). This will solve lot of your problems.

You save 70% disk space on this column, you may not insert bad ip (195.10.320.590), all queries are easier and faster, for example:

select all ip of a table in the range 192.10.*.*:

select ip from ip_table where ip between inet_aton("192.10.0.0") and inet_aton("192.10.255.255")

This result in a range selection rather than a ugly "like" operation...

Patrick Allaert

Posted by Phil Beynon on December 14 2003 2:50pm[Delete] [Edit]

It's worth noting that the position (pos) part of substring does not work quite the same as the PHP substr() command in that;

mysql> select uid from auth_user WHERE substring(uid,0,6) = 'fe4fdf';
Empty set (0.00 sec)

Functionaly would work in PHP correctly whereas MySQL needs it to be;

mysql> select uid from auth_user WHERE substring(uid,1,6) = 'fe4fdf';

+----------------------------------+
| uid |
+----------------------------------+
| fe4fdf28319300c9d0d847a1f994789a |
+----------------------------------+
1 row in set (0.00 sec)

The reason being that PHP calls the first char position zero against MySQL calling it position 1

Might seem obvious but it caught me out properly!

Phil

Posted by [name withheld] on December 22 2003 4:33pm[Delete] [Edit]

By the way, RPAD can be used to create on-the-fly histograms right in the mysql client:

SELECT category,COUNT(*),RPAD('',COUNT(*),'X') FROM table1 GROUP BY 1;

For example, to get a quick idea of the distribution of string lengths in a certain field, I used:

SELECT DISTINCT(LENGTH(name)),COUNT(*),RPAD('',COUNT(*),'X') FROM topics GROUP BY 1;

Posted by Scott Wessels on January 6 2004 9:24pm[Delete] [Edit]

Associative arrays -
using ELT(FIELD()) you can emulate associative arrays...

FIELD => ELT
50 => 1
40 => 33
30 => 49
25 => 57
20 => 61
10 => 63

SELECT col1, ELT(FIELD(col1, 50, 40, 30, 25, 20, 10), 1, 33, 49, 57, 61, 63) AS aa1 FROM t1;

Posted by Artem Lomakin on January 13 2004 5:07am[Delete] [Edit]

On 3.23 I've found that if CONCAT_WS is called with arguments other than strings (in my case it was integer field) it returns binary string value, so queries like
"select int_field, str_field from some_table where concat_ws(' ', int_field, str_field) like '%keyword%'" become case sensitive.

Posted by Matthew Waygood on February 19 2004 6:17am[Delete] [Edit]

is there a LOCATE based on pattern matching?
I am trying to extract the area of a postcode so CF would be the area for CF1 4HT, and S would be the area for s12 4DJ.
I need to do a LEFT and use the position of the first digit [0-9]

Posted by [name withheld] on March 1 2004 9:58am[Delete] [Edit]

Working on a project recently I needed the ability to count the number of occurrences of a given character in a given string. Unfortunately there is not a character counting function in MySQL, but the following suffices:

SELECT LENGTH(t1.string) - LENGTH(REPLACE(t1.string, 'f', '')) AS count
FROM table1 t1
WHERE string = 'foo';

This would then return a single result with a value of 1 (assuming of course there was only one record for 'foo'). Changing the replace argument from a 'f' to 'o' for example would give you again a single result but of course with a value of 2 since the character 'o' occours twice. Please note that this is case sensitive check; if you wish to search in a non case sensitive manner then simply wrap all string references in a LOWER().

Hope this helps.

Add your own comment.