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

Dzielenie wartości oddzielonych przecinkami w Oracle

Działa idealnie dla mnie -

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>

Istnieje wiele innych sposobów na osiągnięcie tego. Przeczytaj Podziel pojedynczy ciąg oddzielony przecinkami na wiersze.

Aktualizacja Jeśli chodzi o duplikaty, gdy kolumna jest używana zamiast pojedynczej wartości ciągu. Widziałem tutaj użycie DBMS_RANDOM w klauzuli PRIOR, aby pozbyć się pętli cyklicznej

Wypróbuj następujące,

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>

Aktualizacja 2

Inny sposób,

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zarządzanie ODP.NET — nie można znaleźć żądanego dostawcy danych .Net Framework

  2. Czy istnieje sposób na użycie Linq to Oracle?

  3. Jak przeprowadzić instalację instancji EBS 12.2 Vision

  4. Enterprise Manager 11g FMW Control w R12.2

  5. Zrzut zużycia kursora