Escrito em June 4th, 2009 as 10:33 am por Pablo Roveroni

0 Comentários

Quem aqui nunca perdeu ao menos uma tarde inteira para deixar os dados inputados em uma base mais apresentáveis; na verdade mais padronizados.
Dia desses me deparei com uma situação assim; era preciso que eu padronizasse os nomes dos fulanos e imagina que cada um inseriu da maneira como bem quis e não houve uma regra para formatar os dados lá na interface. Aí lá vai o peão dar enxadada no banco pra cavar essas minhocas.
Pois além da importância da informação é a qualidade da informação e padronizar os dados é sempre bom, economiza tempo de desenvolvimento e melhora a aparência dos relatórios e dados apresentados na interface com o usuário.
Aqui vai um código que fiz e que acho que pode ajudar você a resolver este problema. O que fiz foi um cursor que varre os registros em busca de espaços em branco e com isso coloca o primeiro caractere que vem logo após este espaço em branco ser maiúsculo isso se chama Proper Case. Espero que seja útil.

--Transforma tudo em minúsculo
update tmp_limpeza
set         nome = lower(nome)
go

--Retira os espaços em branco a esquerda
update tmp_limpeza
set                         nome = ltrim(nome)
go

--Retira os espaços em branco a direita
update tmp_limpeza
set                         nome = rtrim(nome)
go

--A primeira letra de cada um dos nomes como maiúscula
update tmp_limpeza
set    nome = upper(substring(nome, 1, 1)) + substring(nome, 2, len(nome))

--Começa o cursor
declare @nome varchar(500)
declare @nomenovo varchar(500)

declare @letra varchar(1)
declare @pilha integer

set @pilha = 0
declare cursornome cursor for
select    nome
from      tmp_limpeza
where    nome like '% %'

	open cursornome
		fetch next from cursornome
		into @nome

		while @@fetch_status = 0
		begin

			set @pilha = 1
			set @nomenovo = ''

			--Varre a string do nome para fazer as substituições
			while @pilha < len(@nome) + 1 begin
				set @letra = substring(@nome, @pilha, 1)

				set @nomenovo = @nomenovo + @letra

				if (@letra = ' ') begin
	            set @nomenovo = @nomenovo + upper(substring(@nome, @pilha + 1, 1))
	            set @pilha = @pilha + 1
				end

				set @pilha = @pilha + 1

			end

			--Atualiza o nome na tabela
			update tmp_limpeza
			set      nome = @nomenovo
			where  nome = @nome

			fetch next from cursornome
			into @nome
		end
	close cursornome
deallocate cursornome

Be the first to start a conversation

Deixa uma Resposta

znjdb32s6g