यह 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 वर्ण हैं, प्रत्येक वर्ण एक दशमलव अंक है (9 के माध्यम से 0)।