Dies ist eine nicht triviale Aufgabe in MySQL, es gibt keine eingebaute Funktion zum Zurückgeben einer Übereinstimmung mit regulären Ausdrücken. Aber weil Sie genau 13 Ziffern suchen, könnten Sie so etwas tun (natürlich erweitern Sie dies auf die Anzahl der Stellen, die Sie überprüfen müssen ...
-- setup test
CREATE TABLE t (foo VARCHAR(30));
INSERT INTO t VALUES
('1938420985390asdfih')
,('1234812934810dflkasd')
,('asdfasldkjfaasdfjasd')
,('asd;flkjaklsdf')
,('adfsdf1234073927357sdapjfas')
,('1/4sdikhsd')
SELECT CASE
WHEN SUBSTR(foo,1,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,1,13)
WHEN SUBSTR(foo,2,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,2,13)
WHEN SUBSTR(foo,3,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,3,13)
WHEN SUBSTR(foo,4,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,4,13)
WHEN SUBSTR(foo,5,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,5,13)
WHEN SUBSTR(foo,6,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,6,13)
WHEN SUBSTR(foo,7,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,7,13)
WHEN SUBSTR(foo,8,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,8,13)
WHEN SUBSTR(foo,9,13) REGEXP '^[0-9]{13}$' THEN SUBSTR(foo,9,13)
END AS digits
FROM t
-------------------
1938420985390
1234812934810
(NULL)
(NULL)
1234073927357
(NULL)
Nein, es ist nicht schön. Aber Sie sollten in der Lage sein, dies zu erweitern, um eine Zeichenfolge angemessener Länge effektiv zu "scannen".
HINWEIS:Der reguläre Ausdruck prüft, ob die gesamte 13-stellige Teilzeichenfolge aus genau 13 Zeichen besteht, wobei jedes Zeichen eine Dezimalziffer (0 bis 9) ist.