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

Chọn một phần của trường có regex

Câu trả lời này đã lỗi thời. MySql có hỗ trợ regex tốt hơn.

Không, thật buồn khi nói rằng MySQL không có cách nào để áp dụng regex cho nội dung của cột trong mệnh đề SELECT, chỉ có mệnh đề WHERE.

Nhưng bạn có thể sử dụng các hàm thao tác chuỗi thông thường (không phải regex) để thực hiện việc này. Nếu cột chứa ký hiệu và chuỗi tham số được phân tách bằng dấu và được đặt tên là url , bạn có thể nhận được số id với biểu thức chuỗi nhỏ này, sẽ tìm thấy số id của bạn.

  CAST(RIGHT(url, LENGTH(url) - 3 - LOCATE('&id=', url)) AS SIGNED INTEGER)

Vì vậy, nếu bạn muốn một danh sách id giá trị từ url các cột của table1 , bạn có thể sử dụng SELECT này truy vấn.

SELECT CAST(RIGHT(url, LENGTH(url) - 3 - 
                       LOCATE('&id=', url)) AS SIGNED INTEGER) AS id
  FROM table1
 WHERE url REGEXP '&id=[0-9]+'

Như bạn có thể thấy, điều này sử dụng chức năng tìm kiếm regexp để xác định vị trí các hàng thích hợp.

Không có gì nhanh về điều này. Đối sánh Regexp không thể khai thác chỉ mục MySQL. Nếu bạn có lựa chọn tải bảng của mình với cột id được trích xuất trước, bạn sẽ tốt hơn nhiều khi tìm kiếm khi bảng của bạn lớn hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zend_Db:Làm cách nào để kết nối với cơ sở dữ liệu MySQL qua đường hầm SSH?

  2. Làm cách nào để nhập tệp excel vào MySQL Workbench?

  3. Cách cấu trúc cơ sở dữ liệu cho các cảnh báo mục chưa đọc cho mỗi người dùng

  4. SQLSTATE [HY000] [1698] Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost'

  5. Tại sao có thể sử dụng các giá trị chuỗi số để đặt các trường số nguyên trong MySQL và đây có phải là một tính năng sẽ luôn hoạt động không?