sql >> Database >  >> RDS >> Oracle

Door komma's gescheiden waarden splitsen in Oracle

Werkt perfect voor mij -

SQL> WITH dummy_table AS(
  2  SELECT '3862,3654,3828' dummy FROM dual
  3  )
  4  SELECT trim(regexp_substr(dummy,'[^,]+',1,Level)) AS dummycol
  5  FROM dummy_table
  6    CONNECT BY level <= LENGTH(REGEXP_REPLACE(dummy,'[^,]+'))+1
  7  /

DUMMYCOL
--------------
3862
3654
3828

SQL>

Er zijn veel andere manieren om dit te bereiken. Lees Enkele door komma's gescheiden tekenreeksen splitsen in rijen.

Bijwerken Wat betreft de duplicaten wanneer de kolom wordt gebruikt in plaats van een enkele tekenreekswaarde. Zag het gebruik van DBMS_RANDOM in de PRIOR-clausule om hier van de cyclische lus af te komen

Probeer het volgende,

SQL> WITH dummy_table AS
  2    ( SELECT 1 rn, '3862,3654,3828' dummy FROM dual
  3    UNION ALL
  4    SELECT 2, '1234,5678' dummy FROM dual
  5    )
  6  SELECT trim(regexp_substr(dummy,'[^,]+',1,Level)) AS dummycol
  7  FROM dummy_table
  8    CONNECT BY LEVEL          <= LENGTH(REGEXP_REPLACE(dummy,'[^,]+'))+1
  9  AND prior rn                 = rn
 10  AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
 11  /

DUMMYCOL
--------------
3862
3654
3828
1234
5678

SQL>

Update 2

Een andere manier,

SQL> WITH dummy_table AS
  2    ( SELECT 1 rn, '3862,3654,3828' dummy FROM dual
  3    UNION ALL
  4    SELECT 2, '1234,5678,xyz' dummy FROM dual
  5    )
  6  SELECT trim(regexp_substr(t.dummy, '[^,]+', 1, levels.column_value)) AS dummycol
  7  FROM dummy_table t,
  8    TABLE(CAST(MULTISET
  9    (SELECT LEVEL
 10    FROM dual
 11      CONNECT BY LEVEL <= LENGTH (regexp_replace(t.dummy, '[^,]+')) + 1
 12    ) AS sys.OdciNumberList)) LEVELS
 13    /

DUMMYCOL
--------------
3862
3654
3828
1234
5678
xyz

6 rows selected.

SQL>


  1. Hoe AppArmor te configureren voor PostgreSQL en TimescaleDB

  2. Wat is GEEN logische operator in SQL Server - SQL Server / TSQL-zelfstudie, deel 121

  3. Hoe de waarde van het samengestelde variabele veld in te stellen met behulp van dynamische SQL

  4. Hoe rijwaarden converteren naar kolommen met dynamische kolommentelling?