MySQL « regex удалить все символы не цифры

Подскажите как удалить все "не цифры"? скажем в поле есть такие данные ABC123BDE а выходе должно получиться 123

1 ответов


Можете так (ф-я возвращает последовательность цифр в строке, последовательность дожна быть одна, т.е. для строки AAAA123BBB234 результат будет неправильным ):


    drop function if exists parseString;

delimiter //
CREATE FUNCTION parseString (str varchar(1000)) returns varchar(1000)
BEGIN
DECLARE start_idx , end_idx INT;

SELECT  MIN(num), MAX(num)
INTO start_idx , end_idx
FROM
(
select LOCATE('0',str) as num
union
select LOCATE('1',str)
union
select LOCATE('2',str)
union
select LOCATE('3',str)
union
select LOCATE('4',str)
union
select LOCATE('5',str)
union
select LOCATE('6',str)
union
select LOCATE('7',str)
union
select LOCATE('8',str)
union
select LOCATE('9',str)
)a
WHERE num>0;
return SUBSTRING(str,start_idx,(1+end_idx-start_idx));
END;
//
 

Автору через 2 года наверное уже не надо, но вдруг кому пригодится.

В общем пару часов рыл документацию, подходящей функции не нашел, пошел по простому пути -

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE('text123text45text678text9text', '9', ''), '8', ''), '7', ''), '6', ''), '5', ''), '4', ''), '3', ''), '2', ''), '1', ''), '0', '')