Đây là một nhiệm vụ không hề nhỏ trong MySQL, không có hàm nội trang nào để trả về một kết quả khớp biểu thức chính quy. Nhưng bởi vì bạn đang tìm kiếm chính xác 13 chữ số, bạn có thể làm như thế này (rõ ràng là mở rộng điều này đến số vị trí bạn cần kiểm tra ...
-- 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)
Không, nó không đẹp. Nhưng bạn có thể mở rộng điều này để "quét" một cách hiệu quả một chuỗi có độ dài hợp lý.
LƯU Ý:Biểu thức chính quy đang kiểm tra xem toàn bộ chuỗi con 13 ký tự bao gồm chính xác 13 ký tự, mỗi ký tự là một chữ số thập phân (0 đến 9).