Ich habe die bereits vorgestellte Lösung für MySQL >=8 und MariaDB >= 10.0.5 so vervollständigt, dass eine Funktion erstellt wird, welche sodann für Updates, Inserts und Where-Klauseln benutzt werden kann:
USE `test`;
DROP TABLE IF EXISTS `ptest`;
CREATE table `ptest`( `t` TEXT(30) , `t_n` TEXT(30) );
INSERT INTO `ptest` (`t`) VALUES('099 123456789');
INSERT INTO `ptest` (`t`) VALUES('099 1234567 89');
INSERT INTO `ptest` (`t`) VALUES('0049 99 1234567-89');
INSERT INTO `ptest` (`t`) VALUES('+49 99 1234567-89');
INSERT INTO `ptest` (`t`) VALUES('++49 99 1234567-89');
INSERT INTO `ptest` (`t`) VALUES('0049 (0)99 1234567-89');
INSERT INTO `ptest` (`t`) VALUES('+49 (0)99 1234567-89');
INSERT INTO `ptest` (`t`) VALUES('++49 (0)99 1234567-89');
DROP FUNCTION IF EXISTS t_clear;
DELIMITER $$
CREATE FUNCTION t_clear (s TEXT(30) ) RETURNS text(30)
BEGIN
SET s = CONCAT (
'00',
REGEXP_REPLACE (
REGEXP_REPLACE (
REPLACE (
REGEXP_REPLACE(
s,
'^\\+\\+|^00',
'+'
),
'(0)',
''
),
'^0',
'49'
),
'[^0-9]',
''
)
);
RETURN s;
END$$
DELIMITER ;
UPDATE `ptest` SET `t_n` = t_clear(`t`);
INSERT INTO `ptest` VALUES ( '0561 123456789', t_clear('0561 123456789') );
SELECT '- ALLE: -----------------------------------------------' as '';
SELECT `t`, `t_n` FROM `ptest`;
SELECT '- Mit 049561 beginnend: -------------------------------' as '';
SELECT `t`, `t_n` FROM `ptest` WHERE `t_n` LIKE '0049561%';
SELECT '- Mit 0561 beginnend: ----------------------------------' as '';
SELECT `t`, `t_n` FROM `ptest` WHERE `t_n` LIKE CONCAT( t_clear('0561'), '%' ) ;
SELECT '-------------------------------------------------------' as '';
Tabelle und Funktion müssen natürlich nur einmal erstellt und das Update nur einmal durchgeführt werden. Bereits existierende Abfragen müssen dann natürlich auch angepasst werden…