Oi Francisco,

Adaptando a solução do Chiappa, dá uma olhada nesse exemplo...

--
SQL> create table t1 (c1 varchar2(50));

Tabela criada.

SQL> insert into t1 values ('primeiralinha
  2  segundalinha
  3  terceiralinha');

1 linha criada.

SQL> insert into t1 values ('primeiralinha'||chr(10)||'segundalinha');

1 linha criada.

SQL> insert into t1 values ('unica linha');

1 linha criada.

SQL> commit;

Commit concluido.

SQL> select * from t1;

C1
--------------------------------------------------
primeiralinha
segundalinha
terceiralinha

primeiralinha
segundalinha

unica linha

3 linhas selecionadas.

SQL> select c1 from t1 where regexp_like(c1, chr(10));

C1
--------------------------------------------------
primeiralinha
segundalinha
terceiralinha

primeiralinha
segundalinha


2 linhas selecionadas.

SQL> select
  2      c1,
  3      (length(c1) -
nvl(length(replace(c1,chr(10),'')),0))/length(chr(10)) cnt
  4  from t1 where regexp_like(c1, chr(10));

C1                                                        CNT
-------------------------------------------------- ----------
primeiralinha                                               2
segundalinha
terceiralinha

primeiralinha                                               1
segundalinha

2 linhas selecionadas.

SQL>
--

Funciona para contar ENTER's que é uma maravilha....

[]s
Braga

2009/5/21 jlchiappa <jlchia...@yahoo.com.br>

>
>
> Bom, primeiro contagem de ocorrências de um dado caracter numa string : até
> existem algumas funções que se poderia usar , dependendo ** fundamentalmente
> ** da versão de banco, que pra variar vc não diz, mas a contagem só com
> funções genéricas é franciscanamente SIMPLES, vc tira do comprimento da
> string original o comprimento dela SEM o caracter desejado, kapluft , tipo +
> ou - :
>
> select (length(:main_str) -
> nvl(length(replace(:main_str,:srch_str,'')),0))/
> length(:srch_str) cnt
> from dual;
>
> Isso em qquer versão, mas já se for banco 10g vc pode usar as funções de
> regexp, há uma count lá...
>
> Já pra retornar cada posição de cada ocorrência vc terá, afaik, que ter uma
> lógica de loop, ie : vc tem várias funções que retornam a posição de uma
> dada ocorrência dum caracter (como a INSTR , ou algumas do pacote regexp no
> 10g), vc teria que executar a função escolhida n vezes, uma pra cada
> ocorrência - isso poderia ser um loop PL/SQL (a opção mais simples, afaik)
> ou se exigido que seja em SQL apenas aí provavelmente vc teria que escrever
> um SQL mais complexo, repetindo n vezes um select instr da string from dual,
> já seria algo BEM mais complexo, mas possível, certamente.
>
> []s
>
> Chiappa
> --- Em oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br>,
> francisco porfirio <francisco.porfi...@...> escreveu
>
> >
> > Caros,
> >
> > Gostaria de um axulio de vocês.
> >
> > Estou precisando detectar as quebras de linhas da minha string.
> >
> > Consegui detecar apenas a primeira debra de linha atavés do instr.
> >
> > Alguem sabe informar se tem alguma função que me retorne a posição de
> todos
> > os caracter do tipo quebra de linha "chr(10)", ou que ao menos me informe
> > quantas vezes esse caracter se repete na minha tring ?
> >
> > obrigado;
> >
> > --
> > Atenciosamente
> > Francisco Porfirio Ribeiro Neto
>


[As partes desta mensagem que não continham texto foram removidas]

Responder a