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

Jak usunąć duplikaty z listy oddzielonej spacjami przez Oracle regexp_replace?

Jeśli dobrze rozumiem, nie musisz po prostu zastępować „,” spacją, ale także usuwać duplikaty w inteligentniejszy sposób.

Jeśli zmodyfikuję to wyrażenie, aby działało ze spacją zamiast ',', otrzymam

select regexp_replace('A B A A C D' ,'([^ ]+)( [ ]*\1)+', '\1') from dual

co daje 'A B A C D' , a nie to, czego potrzebujesz.

Sposób na uzyskanie pożądanego wyniku może być następujący, nieco bardziej skomplikowany:

with string(s) as ( select 'A B A A C D' from dual)    
    select listagg(case when rn = 1 then str end, ' ') within group (order by lev)
    from (
            select str,  row_number() over (partition by str order by 1) rn, lev
            from (
                SELECT trim(regexp_substr(s, '[^ ]+', 1, level)) str,
                       level as lev
                  FROM string
                CONNECT BY instr(s, ' ', 1, level - 1) > 0
                )
         )

Moim głównym problemem jest to, że nie jestem w stanie zbudować wyrażenia regularnego, które sprawdza, czy nie są sąsiadujące z duplikatami, więc muszę podzielić ciąg, sprawdzić duplikaty, a następnie ponownie zagregować niezduplikowane wartości, zachowując kolejność.

Jeśli nie masz nic przeciwko kolejności tokenów w ciągu wynikowym, można to uprościć:

with string(s) as ( select 'A B A A C D' from dual)
select listagg(str, ' ') within group (order by 1)
from (
        SELECT distinct trim(regexp_substr(s, '[^ ]+', 1, level)) as str
          FROM string
        CONNECT BY instr(s, ' ', 1, level - 1) > 0
     )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz wartość z FieldA, wyślij do funkcji db, zwróć wartość do FieldB

  2. Jaka jest różnica między słowem kluczowym join a słowem kluczowym join w Oracle sql?

  3. Wiersze Oracle Delete zgodne z wieloma wartościami

  4. Jak usunąć maszynę wirtualną z VirtualBox?

  5. Jak tworzyć procedury składowane PL/SQL bez parametrów w bazie danych Oracle