2009/7/6 Fabrízio de Royes Mello <[email protected]>:
>
>
> 2009/7/6 Rubens José Rodrigues <[email protected]>
>>
>> <corte>
>>
>> a) Contar a presença de uma determinada string dentro de outra string.
>> Ex.: strcount(‘a’,’amanhã’)(*), aqui esta função contaria a incidência da
>> substring ‘a’ na string ‘amanhã’ me retornado o valor 2.
>
> Caro Rubens,
>
> Função nativa do PostgreSQL para solucionar esse teu problema creio que não
> tenha (pelo menos não encontrei na documentação [1])
>
> Mas rapidinho podemos solucionar esse impasse:
>
> create or replace function strcount(text, text) returns bigint as
> $$
>   select sum(conta)
>     from (select case
>                    when substr($2, i, 1) = $1 then
>                      1
>                    else
>                      0
>                  end as conta
>             from generate_series(1, length($2)) as i) as x;
> $$
> language sql;
>
>
> E um teste rápido:
>
>
> bdteste=# select strcount('i', 'Fabrizio');
>  strcount
> ----------
>         2
> (1 row)
>
> bdteste=# select strcount('a', 'amanhã');
>  strcount
> ----------
>         2
> (1 row)
>
>
> Espero ter ajudado.
>
>
> [1] http://www.postgresql.org/docs/8.4/interactive/functions-string.html
>
>



Apenas para constar.

Além da solução do Fabrízio podemos utilizar as funções built-in do PostgreSQL:

bdteste=# SELECT length(regexp_replace('amanhã', '[^a]', '', 'g'));
 length
--------
      2
(1 registro)

http://www.postgresql.org/docs/current/interactive/functions-matching.html#FUNCTIONS-POSIX-REGEXP

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a