Eu tenho um campo que as pessoas historicamente poderiam usar para fornecer livremente um valor. Preciso identificar os registros que não possuem um valor apropriado para que eu possa limpá-los.
Eu estive procurando no SSIS por isso. Minha inclinação é usar um componente de script com uma expressão regex em algum código C #, seguido por um redirecionamento. Ainda assim, eu queria saber se havia uma maneira no SSIS de fazer isso sem recorrer ao C #.
Não tive muita sorte em encontrar uma maneira de descobrir quantos registros não têm números de telefone apropriados.
sql-server
sql-server-2008
query
rsteckly
fonte
fonte
Respostas:
É uma tarefa única. Escreva um aplicativo pequeno ou apenas selecione um script, use C #, VB.NET, T-SQL ... e analise todos os padrões manualmente. Talvez você descubra padrões comuns pelos operadores que inseriram esses dados. Adicione um algoritmo para cada padrão. Aplique seus padrões a dados reais em um banco de dados. Remova todos os registros "errados".
Sorte.
ADICIONADO:
Como opção, você pode usar o banco de dados de números de telefone para verificar a validade de person2number, se possível.
fonte
SSIS = Serviço de Integração do SQL Server - principalmente uma maneira de integrar dados de várias fontes para muitos destinos. Algo como um mecanismo para pegar dados do excel / csv / text .. que outro arquivo vem à mente .. e movê-los para um banco de dados. Ou o contrário.
Mas, para realmente selecionar e manipular dados, você ainda poderá / precisará usar o T-SQL.
Pelo que sei, o T-SQL não possui nenhum componente de regex para ajudá-lo; portanto, você precisará usar um assembly .NET para fazer isso.
fonte
Você pode obter uma estimativa rápida através da seguinte cláusula WHERE, já que os números de telefone não devem ter caracteres alfabéticos ... a menos que você permita números fonéticos, por exemplo, 1-800-ANT-FARM.
Você não pode executar expressões regulares complexas usando LIKE , mas pode obter uma aproximação aproximada.
Meu teste:
fonte
Depende do que é aceitável ou não em um número de telefone
Isso fornece todos os valores que não são 100% numéricos usando NOT no padrão de pesquisa
Mas se você permitir
-
ou(000)
for mais complexo: precisa de dados de amostra, por favorfonte
Tente algo como isto:
Se você encontrar padrões válidos, mas não cobertos pela consulta, adicione-os às partes e peças mostradas. Se você encontrar algo que precisa estar junto nas duas partes, modele-o após o Extension CTE (que está ausente ou uma combinação de Ext1 e Ext2). Se você precisar oferecer suporte a números internacionais, e eles tiverem padrões diferentes (que não correspondam aos EUA 3-3-4), será necessária alguma análise e correlação adequada para fazer com que os códigos de país certos correspondam aos padrões certos. Por exemplo, eu sei que em certas partes do Brasil, este é um número válido: +55 85 1234-5678 (código do país 55, código de área dois dígitos e padrão 4-4).
Outra técnica para ajudá-lo a analisar seus dados é:
Isso pode ajudá-lo a entender como são os seus dados, ignorando as diferenças reais de número de telefone entre cada linha e prestando atenção apenas à organização e contagem de dígitos. Se houver muitos caracteres alfa, tente começar a substituir padrões válidos (como "ext") por um valor não encontrado na lista, para recolher o restante da entrada espúria em algo que possa ser analisado com um valor semelhante.
Replace()
para cada letra do alfabeto.fonte