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

kết nối bằng mệnh đề trong regex_substr

Sự "lạm dụng" (như Colin 't Hart đã nói) của connected by có mục đích tốt ở đây:bằng cách sử dụng REGEXP_SUBSTR bạn chỉ có thể trích xuất một trong 4 kết quả phù hợp (23,34,45,56):regex [^,]+ khớp với bất kỳ chuỗi ký tự nào trong chuỗi không chứa dấu phẩy.

Nếu bạn thử chạy:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token" 
FROM   DUAL

bạn sẽ nhận được 23 .

và nếu bạn thử chạy:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM   DUAL

bạn cũng sẽ nhận được 23 chỉ có điều bây giờ chúng tôi cũng đặt hai tham số bổ sung :bắt đầu tìm kiếm ở vị trí 1 (là vị trí mặc định) và trả về lần xuất hiện đầu tiên.

Bây giờ hãy chạy:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM   DUAL

lần này chúng ta sẽ nhận được 34 (Lần xuất hiện thứ 2) và sử dụng 3 vì tham số cuối cùng sẽ trả về 45 và như vậy.

Việc sử dụng connected by cùng với level đảm bảo rằng bạn sẽ nhận được tất cả các kết quả có liên quan (mặc dù vậy không nhất thiết phải theo thứ tự ban đầu!):

SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM   DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1

sẽ trở lại:

TOKEN
23
34
45
56

không chỉ chứa tất cả 4 kết quả mà còn chia nó thành các hàng riêng biệt trong tập kết quả!

Nếu bạn loay hoay với nó - nó có thể cung cấp cho bạn một cái nhìn rõ ràng hơn về chủ đề.



  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ác câu hỏi hàng đầu về JAVA / JRE trong Ứng dụng Oracle

  2. Làm thế nào để bạn biết một chỉ số tốt là gì?

  3. Cách tính hệ số phân cụm chỉ số Oracle

  4. Tạo dạng xem Pivot trong SQL từ bảng SQL

  5. Oracle SQL - Xác định phạm vi giá trị tuần tự