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

Chuyển đổi chuỗi phân cách thành hàng trong oracle

Riffing phương pháp này để tách một chuỗi trong khi cho phép các giá trị rỗng:

select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, level, null, 1) from dual
connect by level < regexp_count('A~^B~^C~D^E','(.*?)(~\^|$)');

REGEXP_SUBS
-----------
A
B
C~D^E

Như trong câu trả lời được liên kết, nó tìm kiếm bất kỳ ký tự nào, không tham lam, theo sau là sự kết hợp của ~^ (với dấu mũ được thoát ra, vì vậy ~\^ ) hoặc cuối dòng. regexp_substr() lệnh gọi cũng sử dụng các đối số tùy chọn để chỉ định subexpr - vì vậy nó chỉ nhận được nhóm đầu tiên (.*? ) chứ không phải chính dấu phân tách, nằm trong nhóm thứ hai.

Nếu bạn muốn một phần tử cụ thể thì phần tử đó thậm chí còn gần với bài đăng được liên kết hơn:

select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;

REGEX
-----
C~D^E

Hoặc khi bạn đang thực hiện điều này trong một thủ tục, hãy sử dụng truy vấn kết nối theo từng phần để điền vào một tập hợp, sau đó chọn phần tử bạn cần, nếu bạn đang xem nhiều hơn một phần tử.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để biết id trước khi lưu một đối tượng trong jpa

  2. Nhận số lượng tất cả các bảng trong một giản đồ

  3. Làm thế nào để tạo tệp nhật ký trong Oracle bằng PL / SQL?

  4. Từ khóa FROM không được tìm thấy ở nơi mong đợi (Oracle SQL)

  5. Không thể tải DLL “OraOps10.dll”