--
-- Nome Artefato/Programa..: sf_formata_nome.sql
-- Autor(es)...............: Emerson Hermann (emersonhermann@gmail.com)
-- Data Inicio ............: 07/02/2011
-- Data Atual..............: 14/02/2011
-- Versao..................: 0.01
-- Compilador/Interpretador: PostgreSql
-- Sistemas Operacionais...: Linux/Windows
-- SGBD....................: PostgreSql 9.x
-- Kernel..................: Nao informado!
-- Finalidade..............: store function para formata um nome, colocando iniciais em maiúsculas e demais em minúsculas
-- OBS.....................: uso de função de agregacao array_agg funciona no PG 8.4 / 9.0, substituir por array_accum no PG anterior a essas versões .
--
-- Apaga function se existir
DROP FUNCTION IF EXISTS sf_formata_nome(text);
CREATE OR REPLACE FUNCTION sf_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 sf_formata_nome(text) IS 'Função que formata um nome, colocando iniciais em maiúsculas e demais em minúsculas';
SELECT sf_formata_nome('JOSE E SILVA DE LIRA DOS SANTOS');
DBA, MySql, Oracle, Postgres, SQL Server, DB2, BI, TI, Business Intelligence, Data Science, Machine Learning, IoT, Arduino
segunda-feira, 14 de fevereiro de 2011
Formatando nomes, colocando iniciais em maiúsculas e demais em minúsculas
É raro, mas, as vezes acontece de que o DBA Postgres, ter que adaptar um estrutura de nomes em uma ou mais tabelas, com iniciais em maiúsculas e demais e minúsculas, aqui segue um store function para fazer esse moido.
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário