Em 7 de fevereiro de 2011 18:09, Leonardo Cezar <[email protected]>escreveu:

>
> Com um pouquinho mais de criatividade e tempo dá pra resolver melhor,
> mas é por aqui:
>
> SELECT regexp_replace(initcap('leonardo danubio henrique da silva dos
> santos cezar'), '([[:upper:]])(a|as|os)[[:blank:]]', E'd\\2 ', 'g');
>
>                   regexp_replace
> -----------------------------------------------------
>  Leonardo Danubio Henrique da Silva dos Santos Cezar
> (1 row)
>
>

Só um ajuste para o caso de existir a preposição "de":

postgres@bdteste=# SELECT regexp_replace(initcap('fabrizio de royes mello'),
'([[:upper:]])(a|as|os|e)[[:blank:]]', E'd\\2 ', 'g');
     regexp_replace
-------------------------
 Fabrizio de Royes Mello
(1 row)


Ainda tens de incrementar um pouco essa expressão regular, pois pode existir
um nome do tipo:

fulano de tal souza e silva

Usando a expressão acima fica:

postgres@bdteste=# SELECT regexp_replace(initcap('fulano de tal souza e
silva'), '([[:upper:]])(a|as|os|e)[[:blank:]]', E'd\\2 ', 'g');
regexp_replace
-----------------------------
 Fulano de Tal Souza E Silva
(1 row)


Mas isso fica para tema de casa...

-- 
Fabrízio de Royes Mello
>> Blog sobre TI: http://fabriziomello.blogspot.com
>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a