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

Làm cách nào để tách dữ liệu được truy vấn bằng dấu phân cách trong Oracle?

Bạn có thể làm điều đó bằng cách sử dụng mệnh đề bao thanh toán truy vấn phụ đệ quy và các hàm chuỗi đơn giản (thay vì biểu thức chính quy chậm).

(Lưu ý:điều này cũng không có vấn đề với các truy vấn phân cấp khi có nhiều hàng đầu vào của nó tạo ra nhiều hàng đầu ra hơn theo cấp số nhân ở mỗi độ sâu vì nó không thể tương quan từng hàng với mẹ của nó vì vậy nó sẽ tương quan với tất cả các hàng tại mức phân cấp trước.)

Thiết lập Oracle :

CREATE TABLE some_table( some_id, value ) AS
  SELECT 8, 'A1,A2,A3;A4,A5,A6' FROM DUAL UNION ALL
  SELECT 8, 'B1,B2,B3;B4,B5,B6' FROM DUAL UNION ALL
  SELECT 8, 'C1,C2,C3;C4,C5,C6' FROM DUAL;

Truy vấn :

WITH line_start_end ( some_id, value, startidx, endidx ) AS (
  SELECT some_id,
         value,
         1,
         INSTR( value, ';', 1 )
  FROM   some_table
  WHERE  some_id = 8
UNION ALL
  SELECT some_id,
         value,
         endidx + 1,
         INSTR( value, ';', endidx + 1 )
  FROM   line_start_end
  WHERE  endidx > 0
)
SELECT some_id,
       CASE
       WHEN endidx = 0
       THEN SUBSTR( value, startidx )
       ELSE SUBSTR( value, startidx, endidx - startidx )
       END AS value
FROM   line_start_end;

Đầu ra :

db <> fiddle tại đây



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao tôi dường như không thể buộc Oracle 11g tiêu thụ nhiều CPU hơn cho một truy vấn SQL duy nhất

  2. Trang chủ Oracle Chỉ đọc

  3. Dữ liệu lớn SQL của Oracle

  4. quan điểm oracle và lưu lượng mạng

  5. Các thay đổi của Oracle Ace