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