sql >> Databáze >  >> RDS >> Oracle

Oracle REGEXP_SUBSTR až SUBSTR + INSTR

Váš kód nefunguje jako DUAL tabulka nemá code sloupec; pokud však předpokládáme, že používáte jinou tabulku, která má tento sloupec:

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

Potom můžete použít rekurzivní klauzuli faktoringu poddotazů:

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;

Které výstupy:

db<>fiddle zde




  1. Vrátit všechny řádky z konkrétního oddílu v SQL Server (T-SQL)

  2. Jak použít sjednocení jen jednou s příkazem where?

  3. Jakou velikost má hodnota Null na serveru SQL Server

  4. Jak bezpečný je formát format() pro dynamické dotazy uvnitř funkce?