これはMySQLの重要なタスクであり、正規表現の一致を返すための組み込み関数はありません。しかし、正確に13桁を探しているので、次のようにすることができます(明らかに、これをチェックする必要のある位置の数に拡張します...
-- 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)
いいえ、きれいではありません。ただし、これを拡張して、妥当な長さの文字列を効果的に「スキャン」できるはずです。
注:正規表現は、13文字の部分文字列全体が正確に13文字で構成されていることを確認しています。各文字は、10進数(0から9)です。