[ SQL ] Deletando Registros Duplicados
- Sunday, July 25, 2010"Nem sempre temos tudo que queremos"
Cresci ouvindo essa essa frase e hoje ela se mostra ser verdadeira. Nunca fui de me preocupar muito com a consistência do banco de dado pois sempre tinha alguem para fazer isso por mim, acontece que no meu atual emprego, eu acabo fazendo isso mais do que no antigo e mais do que eu imaginei. Não quero que achem que estou reclamando, estou aprendendo um pouco mais de SQL, e isso era realmente preciso. Mas para justificar a frase eu vou dar um exemplo que me aconteceu essa semana.
Recebi uma base de pessoas com aproximadamente 300.000 registros, precisavamos trabalhar esses dados para utilizar em nossa aplicação. Acontece que aproximadamente 10% dos registros estavem em duplicidade e eu fiquei encarregado de limpar e trabalhar a base. Essa é a jstificativa para a frase, seria tudo tão perfeito se a base fosse consistente, os dados ja estivessem no formato que fossemos usar e tudo mais, MAS "Nem sempre temos tudo que queremos".
Bom vamos a solução. Eu implementei uma rotina para limpar a base usando cursor, demorava alguns minutos para deletar todos os registros duplicados. Então conversando com o Marcus, meu colega de trabalho, ele me mostrou uma solução muito mais eficiente. Resolvi implementar a solução do meu colega e o resultado foi o seguinte, eu deletava tudo em 2 segundos e sem usar cursor.
A SOLUÇÂO:
1) Identificar o campo que seria usado para diferenciar os registros, no meu caso o CPF.
2) Criar uma coluna de identificação para cada registro, usei um int com identity.
3) Deletar os Registros em duplicidade de acordo com o ID.
Abaixo segue o script que usei.
-------
/* Insere coluna para servir como identificador */
alter table TabelaTeste
add id int identity
/* deleta os registros duplicados */
delete t from tabelaTeste t where t.id not in (select min(id) from tabelaTeste t_dup where t_dup.cpf = t.cpf )
-------
Estou liberando para download o script completo que:
1) Cria uma tabela com registros duplicados 
2) Insere uma coluna para identificação dos registros
3) deleta todos os registros em duplicidade, deixando apenas um registro para cada CPF.
4) remove a coluna para identificação do registro
[Download do Script]
Espero ter ajudado.
[ Regex ] Remover tags HTML da string
- Friday, July 16, 2010Mais uma vez quero demonstrar como um regex, utilizado corretamente, pode ser poderoso. Imagine uma string qualquer onde você tenha tags HTML dentro:
"<p>Hi, <br/> “text .</strong>“</p> bad html </ul>will be removed too."
Agora imagine que você tenha que remover todas as tags HTML dessa string.
Fiz essa pergunta para alguns programadores iniciantes, e todos me responderam:
"-Faz um replace em nas tags HTML e remove todas elas".
Realmente é uma saida, mas não é a mais inteligente, funciona até que alguem coloque uma tag que você não tenha previsto. Uma maneira mais eficiente de fazer isso, é usando um Regex. vamus ao exemplo:
static void Main(string[] args)
{
// Some String
const string text = "<p>Hi, <br/> “Walking on water and developing software from a specification are easy if both are <strong>frozen.</strong>“ - Edward V. Berard</p> here some bad html </ul>will be removed too.";
// Write the string with the html tags
Console.WriteLine(text);
// Write the string without the html tags
Console.WriteLine(RemoveHtmlTags(text));
Console.ReadLine();
}
private static string RemoveHtmlTags(string htmlString)
{
// Regex to find all the html tags
const string pattern = @"<(.|\n)*?>";
// Return the string without html tags
return Regex.Replace(htmlString, pattern, string.Empty);
}
Achei que podia ajudar algumas pessoas, então resolvi postar.
Creditos para http://aliraza.wordpress.com/, foi la que achei a primeira versão.
[ .NET ] IronRuby Integration
- Thursday, July 08, 2010Hoje vou falar um pouco sobre IronRuby. Não sou um expert, mas comecei a brincar com o IronRuby, ele é mais uma ferramenta pra guardar naquela caixa de ferramentas que se quando temos um problema.
Em alguns casos queremos precisamos de uma linguagem dinâmica para realizar tarefas complicadas de maneira muito mais facil. Imagine por exemplo que você quer permitir que o cliente execute alguns tipos de scripts, normalmente se usaria um vbscript, mas porque não utilizar uma linguagem dinâmica? Alguns, como eu, devem estar achando que integrar uma linguagem como o ruby ao .net deve ser muito complicado, se você é um desses é porque não conhece o IronRuby (ou IronPyton, teoricamente os dois são muito parecidos).
No exemplo que colocarei para download, mostro como integrar o IronRuby com C#, para isso crio uma Interface simples ICalc e implemento ela em duas classes do ruby. depois executo as duas "calculadoras" que implementei ("somadora" e "multiplicadora").
Segue o exemplo do codigo para a chamada de um arquivo Ruby:
var runtime = Ruby.CreateRuntime();
var engine = runtime.GetEngine("rb");
var paths = new List<string>();
paths.Add(@"E:\Workspace\RafaelAlmeida.net\Trunk\Exemplos\IronRuby\Calculators.Console\bin\Release");
engine.SetSearchPaths(paths);
// Cria calculadora que sabe multiplicar
engine.ExecuteFile("Pessoa.rb");
var rubyClass = engine.Runtime.Globals.GetVariable("Multiplicadora");
var calculator = (ICalc)engine.Operations.CreateInstance(rubyClass);
// Calcula
var result = calculator.calculate(A, B);
// Imprime resultado
System.Console.WriteLine(string.Format("A * B = {0}", result));
// Cria calculadora que sabe somar
rubyClass = engine.Runtime.Globals.GetVariable("Somadora");
calculator = (ICalc)engine.Operations.CreateInstance(rubyClass);
// Calcula
result = calculator.calculate(A, B);
// Imprime resultado
System.Console.WriteLine(string.Format("A + B = {0}", result));
Simples não é? Se você quiser ver o exemplo completo, faça o download [ Aqui ]
Ultimos Posts
7/25/2010
7/16/2010
7/8/2010
6/29/2010
2/8/2010
12/22/2009
Amigos
Navarro
Klaus
Andre
Danilo
Tomás
Carolina Andrade
Design By Carolina Andrade
Rafael da Silva Almeida, 22 Desenvolvedor;
