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

Chuỗi được phân tách bằng dấu phẩy thành danh sách

Có nhiều giải pháp được đăng trong Tách chuỗi phân cách chủ đề của các trang tài liệu Oracle.

Một là:

Dữ liệu mẫu :

CREATE TABLE table_name ( id, list ) AS
SELECT 1, 'a,b,c,d' FROM DUAL UNION ALL -- Multiple items in the list
SELECT 2, 'e'       FROM DUAL UNION ALL -- Single item in the list
SELECT 3, NULL      FROM DUAL UNION ALL -- NULL list
SELECT 4, 'f,,g'    FROM DUAL;          -- NULL item in the list

Truy vấn :

SELECT t.id,
       v.COLUMN_VALUE AS value,
       ROW_NUMBER() OVER ( PARTITION BY id ORDER BY ROWNUM ) AS lvl
FROM   table_name t,
       TABLE(
         CAST(
           MULTISET(
             SELECT REGEXP_SUBSTR( t.list, '([^,]*)(,|$)', 1, LEVEL, NULL, 1 )
             FROM   DUAL
             CONNECT BY LEVEL < REGEXP_COUNT( t.list, '[^,]*(,|$)' )
           )
           AS SYS.ODCIVARCHAR2LIST
         )
       ) v;

Đầu ra :

        ID ITEM           LVL
---------- ------- ----------
         1 a                1 
         1 b                2 
         1 c                3 
         1 d                4 
         2 e                1 
         3 (NULL)           1 
         4 f                1 
         4 (NULL)           2 
         4 g                3 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dữ liệu từ hai bảng vào một chế độ xem

  2. Ánh xạ JPA tới các loại do người dùng Oracle xác định

  3. Chạy Oracle Client ở chế độ 32 bit trên máy 64 bit

  4. Chèn hàng loạt Oracle bằng SQL Developer

  5. Sự khác biệt về kế hoạch thực thi không đáng kể với Oracle khi sử dụng Dấu thời gian hoặc Ngày của jdbc