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

Oracle 11g nhận tất cả các lần xuất hiện phù hợp bằng một biểu thức chính quy

REGEXP_SUBSTR chỉ trả về một giá trị. Bạn có thể biến chuỗi của mình thành một bảng giả và sau đó truy vấn chuỗi đó để tìm các kết quả phù hợp. Có một cách dựa trên XML để thực hiện điều này khiến tôi không hiểu được vào lúc này, nhưng sử dụng kết nối theo hoạt động, miễn là bạn chỉ có một chuỗi nguồn:

SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, LEVEL) AS substr
FROM (
    SELECT 'Txa233141b Ta233141 Ta233142 Ta233147 Ta233148' AS str FROM DUAL
)
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, '[^ ]+')) + 1;

... mang lại cho bạn:

SUBSTR             
--------------------
Txa233141b           
Ta233141             
Ta233142             
Ta233147            
Ta233148            

... và bạn có thể lọc điều đó bằng một phiên bản đơn giản hơn một chút của mẫu ban đầu:

SELECT substr
FROM (
    SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, LEVEL) AS substr
    FROM (
        SELECT 'Txa233141b Ta233141 Ta233142 Ta233147 Ta233148' AS str
        FROM DUAL
    )
    CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, '[^ ]+')) + 1
)
WHERE REGEXP_LIKE(substr, '^[A-Za-z]{2}[0-9]{5,}$');

SUBSTR             
--------------------
Ta233141             
Ta233142             
Ta233147             
Ta233148             

Cái nào không đẹp nhưng cũng không chứa nhiều giá trị trong một trường.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Công cụ dành cho nhà phát triển Oracle SQL:Tải xuống &Cài đặt

  2. Thoát văn bản Oracle với dấu ngoặc nhọn và ký tự đại diện

  3. Xóa tất cả các bản ghi ngoại trừ bản ghi gần đây nhất?

  4. cách đặt cột tăng tự động với nhà phát triển sql

  5. Cách tạo tệp cuộn chỉ lệnh sql oracle