Convertir la primera letra de cada palabra a mayúscula en PostgreSQL (Capitalizar)

Capitalizar es un anglicismo que proviene del verbo Capitalize, y que en inglés significa pasar a mayúsculas una palabra o pasar a mayúscula la primera letra de una palabra dejando el resto en minúsculas. Y es a esto último lo que se me refiero.

En PostgreSQL existen varias funciones para manejo de strings de uso común, como lower() y upper(), pero no existe una para Capitalizar (gracias a Cristian por la aclaración), por lo que debido a la necesidad, escribí una haciendo uso de las funciones.

  • regexp_replace
  • string_to_array
  • array_dims
  • upper
  • lower

Yo quería hacerlo utilizando backreferences en expresiones regulares, pero no pude aplicar una transformación a la backreference, por lo que si a alguien tiene una mejor forma de hacerlo, espero sus comentario. 😛

Aquí les dejo el código:


CREATE OR REPLACE FUNCTION capitalize(_texto text)
RETURNS text AS
$BODY$
DECLARE
fin INTEGER;
temporal RECORD;
retval TEXT;
BEGIN
retval = ' ';
FOR temporal IN SELECT string_to_array (_texto,' ') AS arreglo LOOP
SELECT regexp_replace(
regexp_replace(
array_dims(temporal.arreglo),'[^1-9]','','g')
,'.','')::integer into fin;
FOR i IN 1..fin LOOP
retval = retval
|| upper(substring(temporal.arreglo[i],1,1))
|| lower(regexp_replace(temporal.arreglo[i],'(.)(.*)','\\2'))
||' ';
END LOOP;
END LOOP;
RETURN trim(retval);
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

Como siempre, espero que les sirva, y Hasta la próxima!

Los comentarios están cerrados.