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

Oracle REGEXP_SUBSTR đến SUBSTR + INSTR

Mã của bạn không hoạt động vì DUAL bảng không có code cột; tuy nhiên, nếu chúng tôi giả định rằng bạn đang sử dụng một bảng khác có cột đó:

CREATE TABLE table_name ( code ) AS
SELECT '[1],[22],[333],[4444],[55555],[666666],[7777777],[88888888],[999999999],[0000000000]' FROM DUAL

Sau đó, bạn có thể sử dụng mệnh đề bao thanh toán truy vấn phụ đệ quy:

WITH rsqfc ( code, start_pos, end_pos ) AS (
  SELECT code,
         1,
         INSTR( code, ',', 1 )
  FROM   table_name
UNION ALL
  SELECT code,
         end_pos + 1,
         INSTR( code, ',', end_pos + 1 )
  FROM   rsqfc
  WHERE  end_pos > 0
)
SELECT DISTINCT
       REPLACE(
         CASE end_pos
         WHEN 0
         THEN SUBSTR( code, start_pos + 1, 8 )
         ELSE SUBSTR( code, start_pos + 1, LEAST( end_pos - start_pos - 1, 8 ) )
         END,
         ']'
       ) AS code
FROM   rsqfc;

Đầu ra nào:

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. Làm cách nào để sao chép hoặc nhập các lược đồ Oracle giữa hai cơ sở dữ liệu khác nhau trên các máy chủ khác nhau?

  2. Cách tạo cột không rỗng trong dạng xem

  3. Lỗi bộ điều hợp giao thức TNS khi khởi động Oracle SQL * Plus

  4. Đọc cơ sở dữ liệu đa luồng

  5. Hàm tương đương cho DATEADD () trong Oracle