Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle REGEXP_SUBSTR do SUBSTR + INSTR

Twój kod nie działa, ponieważ DUAL tabela nie ma code kolumna; jeśli jednak założymy, że używasz innej tabeli, która ma tę kolumnę:

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

Następnie możesz użyć rekurencyjnej klauzuli faktoringowej podzapytania:

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;

Które wyjścia:

db<>fiddle tutaj




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL wymagający samodzielnego łączenia i rankingu

  2. logback logowanie w Oracle powoduje błąd dialektu

  3. Jak uzyskać Oracle, zobaczyć jakie procedury są uruchomione?

  4. Jak mogę testować jednocześnie pod kątem wartości null i not null w sql?

  5. Oracle:rok musi mieścić się w przedziale od -4713 do +9999 i nie może wynosić 0