Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara mengurai varchar2 dan membuatnya menjadi beberapa baris?

Anda dapat menggunakan fungsi saluran:

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

Saya menggunakan di sini mydate alih-alih tanggal (kata yang dicadangkan) dan d alih-alih data. Contoh:

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

Beberapa tautan:

Cara memisahkan string yang dipisahkan koma dan meneruskan ke klausa IN dari pernyataan pilihan

Menggunakan Fungsi Tabel Pipeline dan Paralel



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Codeigniter dan konstanta Oracle tidak terdefinisi:OCI_COMMIT_ON_SUCCESS

  2. Bagaimana saya bisa menghitung baris yang terpengaruh agregat jika ada beberapa kueri DML di blok PLSQL saya?

  3. ORA-01840:nilai input tidak cukup panjang untuk format tanggal di Oracle Insert menggunakan Select

  4. Cara mengubah pengaturan untuk Pengembang SQL untuk mengenali versi SDK saat ini dengan benar

  5. Oracle Blob sebagai img src di halaman PHP