Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

trả về các số từ giữa một chuỗi với định dạng không đều

Đâ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).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL và CASE WHEN với một loạt các giá trị

  2. Sự khác biệt giữa mệnh đề where và and trong tham gia truy vấn sql

  3. SQLSTATE [23000]:Vi phạm ràng buộc toàn vẹn:1452 Không thể thêm hoặc cập nhật hàng con:ràng buộc khóa ngoại không thành công

  4. Cách cập nhật dữ liệu tuần tự hóa trong MySQL

  5. Làm cách nào để đặt dấu thời gian là một truy vấn chậm?