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

Oracle REGEXP_SUBSTR ke SUBSTR + INSTR

Kode Anda tidak berfungsi, karena DUAL tabel tidak memiliki code kolom; namun, jika kami berasumsi bahwa Anda menggunakan tabel lain yang memiliki kolom tersebut:

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

Kemudian Anda dapat menggunakan klausa pemfaktoran sub-kueri rekursif:

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;

Keluaran mana:

db<>fiddle di sini




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa memilih dari prosedur tersimpan tidak didukung dalam database relasional?

  2. Kesalahan:Jenis Parameter tidak didukung dalam kode ADODB dari ASP klasik

  3. Fungsi Oracle:Replikasi wm_concat

  4. Cara menghasilkan baris untuk rentang tanggal dengan kunci

  5. Oracle:Menggunakan CTE dengan klausa pembaruan