Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle REGEXP_SUBSTR до SUBSTR + INSTR

Вашият код не работи като DUAL таблицата няма code колона; обаче, ако приемем, че използвате различна таблица, която има тази колона:

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

След това можете да използвате клауза за факторизиране на рекурсивна подзаявка:

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;

Кое извежда:

db<>fiddle тук




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвате Oracle PLSQL таблици (асоциативен масив или таблица по индекс)

  2. Премахнете автоматично най-стария дял в oracle 11G

  3. Oracle trimspool само завършващи празни места (без водещи празни места)

  4. Защо имам неуспешна контролна сума при всяка лоша SQL заявка в Oracle, когато Native Encryption (ASO) е активирано?

  5. Изчисляване на разликата между две времеви марки в Oracle в милисекунди