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

Tách các giá trị được phân tách bằng dấu phẩy trong Oracle

Hoạt động hoàn hảo cho tôi -

SQL> WITH dummy_table AS(
  2  SELECT '3862,3654,3828' dummy FROM dual
  3  )
  4  SELECT trim(regexp_substr(dummy,'[^,]+',1,Level)) AS dummycol
  5  FROM dummy_table
  6    CONNECT BY level <= LENGTH(REGEXP_REPLACE(dummy,'[^,]+'))+1
  7  /

DUMMYCOL
--------------
3862
3654
3828

SQL>

Có nhiều cách khác để đạt được nó. Đọc Chia chuỗi được phân cách bằng dấu phẩy đơn thành các hàng.

Cập nhật Về các bản sao khi cột được sử dụng thay vì một giá trị chuỗi đơn. Thấy việc sử dụng DBMS_RANDOM trong mệnh đề PRIOR để loại bỏ vòng lặp tuần hoàn tại đây

Hãy thử cách sau,

SQL> WITH dummy_table AS
  2    ( SELECT 1 rn, '3862,3654,3828' dummy FROM dual
  3    UNION ALL
  4    SELECT 2, '1234,5678' dummy FROM dual
  5    )
  6  SELECT trim(regexp_substr(dummy,'[^,]+',1,Level)) AS dummycol
  7  FROM dummy_table
  8    CONNECT BY LEVEL          <= LENGTH(REGEXP_REPLACE(dummy,'[^,]+'))+1
  9  AND prior rn                 = rn
 10  AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
 11  /

DUMMYCOL
--------------
3862
3654
3828
1234
5678

SQL>

Cập nhật 2

Một cách khác,

SQL> WITH dummy_table AS
  2    ( SELECT 1 rn, '3862,3654,3828' dummy FROM dual
  3    UNION ALL
  4    SELECT 2, '1234,5678,xyz' dummy FROM dual
  5    )
  6  SELECT trim(regexp_substr(t.dummy, '[^,]+', 1, levels.column_value)) AS dummycol
  7  FROM dummy_table t,
  8    TABLE(CAST(MULTISET
  9    (SELECT LEVEL
 10    FROM dual
 11      CONNECT BY LEVEL <= LENGTH (regexp_replace(t.dummy, '[^,]+')) + 1
 12    ) AS sys.OdciNumberList)) LEVELS
 13    /

DUMMYCOL
--------------
3862
3654
3828
1234
5678
xyz

6 rows selected.

SQL>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khi nào tôi nên lồng các khối PL / SQL BEGIN ... END?

  2. Oracle CASE ngắn mạch không hoạt động theo nhóm bởi

  3. Oracle ngày giữa truy vấn

  4. Phát hiện các thay đổi cơ sở dữ liệu gia tăng (Oracle sang MongoDB ETL)

  5. Trang chủ Oracle Chỉ đọc