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

Làm thế nào để phân tích cú pháp varchar2 và biến nó thành nhiều hàng?

Bạn có thể sử dụng một hàm đường ống:

CREATE or replace TYPE test_type AS TABLE OF varchar2(40)

CREATE or replace FUNCTION test_func (d VARCHAR2)
   RETURN test_type
   PIPELINED
IS
BEGIN
   FOR C1 IN (    SELECT REGEXP_SUBSTR (d, '[^,]+', 1, LEVEL) x
                    FROM DUAL
              CONNECT BY REGEXP_SUBSTR (d, '[^,]+', 1, LEVEL) IS NOT NULL)
   LOOP
      PIPE ROW (c1.x);
   END LOOP;
END;
/

WITH test
     AS ( your_query_here )
SELECT x.id2, x.mydate, y.*
  FROM test x, TABLE (test_func (x.d)) y

Tôi đang sử dụng ở đây mydate thay vì date (từ dành riêng) và d thay vì dữ liệu. Mẫu:

WITH test
     AS (SELECT 2 AS id2, SYSDATE AS mydate, '1.0,1.1,1.2,11,1.4,1.5,2.6,2.7,2.8,2.9,44,55' AS d FROM DUAL
         UNION ALL
         SELECT 3 AS id2, SYSDATE + 1 AS mydate, '19.5,19.9,11.5,11.1,21.2,33,1.4,1.5,2.6,2.7,2.8,2.9' AS d
           FROM DUAL
         UNION ALL
         SELECT 4 AS id2, SYSDATE + 1 AS mydate, '9.5,9.9,1.5,1.1,1.2,66,1.4,1.5,2.6,2.7,2.8,2.9' AS d
           FROM DUAL)
SELECT x.id2, x.mydate, y.*
  FROM test x, TABLE (test_func (x.d)) y

Một số liên kết:

Cách tách chuỗi được phân tách bằng dấu phẩy và chuyển đến mệnh đề IN của câu lệnh select

Sử dụng các hàm bảng Pipelined và Parallel



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thay thế CHAR bằng VARCHAR2

  2. Trình quản lý API WSO2:chpasswd.sh không hoạt động khi sử dụng cơ sở dữ liệu bên ngoài

  3. Khoảng trắng đối sánh Oracle regex

  4. Cơ sở dữ liệu Oracle:Làm thế nào để đọc một BLOB?

  5. vấn đề về hiệu suất:sự khác biệt giữa các lựa chọn. * so với chọn *