Как найти количество и имена отличных персонажей в последовательности в PL/SQL

Я довольно плохо знаком с PL/SQL, и я должен получить имена и количество отличных знаков в последовательности. Например, если у меня есть последовательность str = "helloexample" , я должен получить продукцию отличных знаков в str , т.е. heloxamp .

Как я могу сделать это?

4
Этому уже ответили. Здесь это
добавлено автор SudoRahul, источник
Какую версию Oracle вы используете?
добавлено автор Nick Krasnov, источник
пожалуйста, покажите некоторый исходный код..., что вы попробовали? что точно не работает?
добавлено автор Yahia, источник
Покажите нам свой код, что вы сделали до все же, таким образом, we' ll быть в лучшем положении, чтобы помочь
добавлено автор asifsid88, источник
Необходимо объединить два метода: натяните tokenization (чтобы заставить отдельные символы) и скопление последовательности (соединять их снова). Есть множество различных решений, открытых для вас, которые будут зависеть от вашей версии Oracle.
добавлено автор APC, источник
@RJ Да, второе решение здесь: stackoverflow.com/questions/7226303/… работы отлично. Я просто попытался сделать решение сам, но результат будет выглядеть очень похожим на это.
добавлено автор gaborsch, источник
Там isn' t встроенная функция для этого. Необходимо написать некоторый МН / КОД SQL сами.
добавлено автор Alen Oblak, источник
Я также попробовал WM_CONCAT, но он дает недействительную ошибку идентификатора.
добавлено автор iAmLearning, источник

2 ответы

Можно использовать регулярное выражение следующим образом:

SET serveroutput ON
DECLARE
     str        VARCHAR2(20):='helloexample';
     str_length NUMBER;
     c          VARCHAR2(20):=NULL;
     d          NUMBER;
BEGIN
     str_length:=LENGTH(str);
     FOR i IN 1..str_length
     LOOP
          IF regexp_instr(c,SUBSTR(str,i,1))>0 THEN
               NULL;
          ELSE
               c:=c||SUBSTR(str,i,1);
          END IF;
     END LOOP;
     dbms_output.put_line(c);
END;

ответ был бы:

heloxamp
2
добавлено
Но это - лучший вопрос использования, который уже ответил на кого-то. ИЗБРАННЫЙ ЗАМЕНЯЮТ (Wm_Concat (C), ' ' ' ') ОТ (ВЫБИРАЮТ SUBSTR (' helloexample' Rownum, 1) C, МИНУТА (Rownum) Rn ОТ Двойного СОЕДИНЯЮТ Rownum <= ДЛИНУ (' helloexample') GROUP BY SUBSTR (' helloexample' Rownum, 1) ORDER BY Rn) X;
добавлено автор ajmalmhd04, источник
Спасибо! Это решило мою проблему.
добавлено автор iAmLearning, источник

если WM_CONCAT не работает на вас, можно использовать эту уловку:

select rtrim(xmlagg(xmlelement(e, str)).extract('//text()'), ',') as output
  from (select substr(str, level, 1) str, level l,
               row_number() over (partition by substr(str, level, 1) 
                                      order by level) rn
          from (select 'helloexample' str  from dual) d
        connect by level <= length(str)
        order by level)
 where rn = 1;


SQL> select rtrim(xmlagg(xmlelement(e, str)).extract('//text()'), ',') as output
  2    from (select substr(str, rownum, 1) str, level l,
  3                 row_number() over (partition by substr(str, rownum, 1) order by level) rn
  4            from (select 'helloexample' str  from dual) d
  5          connect by level <= length(str)
  6          order by level)
  7   where rn = 1;

OUTPUT
--------------------------------------------------------------------------------
heloxamp
0
добавлено
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Oracle RU
Oracle RU
303 участник(ов)

Русскоязычная группа по Oracle. — Архитектура СУБД — PL/SQL — Оптимизация — Администрирование — Вакансии Oracle (указать инфу по вилке ЗП и удалёнке) Приглашайте коллег :-) Запрещены: личные оскорбления, обсуждения оффтопик вопросов политики и религии