Sem expressão regular eu faria asim, funciona no PG 9.0,  para
funcionar  no PG 8.x, teria que mudar o array_agg por array_acuum
Criei uma store function apenas para simplificar o uso

DROP FUNCTION IF EXISTS sp_formata_nome(text);
CREATE OR REPLACE FUNCTION sp_formata_nome(var text) RETURNS TEXT AS
$body$
SELECT array_to_string(array_agg(nomes),' ')
  FROM
     (
         SELECT CASE WHEN lower(x.id_unico[i]) = 'de' THEN
                        lower(x.id_unico[i])
                     WHEN lower(x.id_unico[i]) = 'dos' THEN
                        lower(x.id_unico[i])
                     WHEN lower(x.id_unico[i]) = 'da' THEN
                        lower(x.id_unico[i])
                     WHEN lower(x.id_unico[i]) = 'e' THEN
                        lower(x.id_unico[i])    
                     ELSE
                        upper(substring(x.id_unico[i],1,1)) ||
lower(substring(x.id_unico[i],2))
                END AS nomes
           FROM
              (
               SELECT *
                 FROM string_to_array(cast($1 AS text),' ') AS id_unico
              ) AS x,
              generate_series(1,array_upper(string_to_array(cast($1 as
text),' '),1)) AS i

     ) AS x
     ;
$body$
LANGUAGE 'sql';
COMMENT ON FUNCTION sp_formata_nome(text) IS 'Função que formata um
nome, colocando iniciais em maiúsculas e demais em minúsculas';

SELECT sp_formata_nome( 'Jose da Silva e Lira dos Santos');


Caso aconteça outras situações é só acrescentar no case when

Espero ter ajudado !

Emerson Hermann


Em 9 de fevereiro de 2011 21:00, Beto Lima <betol...@gmail.com> escreveu:
> Acredito então que não há jeito mesmo em deixar 100%.
> sobre ter uma lista de valores pra comparações, não teria idéia de
> como ficaria...
> mas agradeço a todos pelas dicas....
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a