J'ai un domaine que les gens pouvaient historiquement utiliser pour fournir librement une valeur. J'ai besoin d'identifier les enregistrements qui n'ont pas de valeur appropriée pour pouvoir les nettoyer.
J'ai cherché autour de SSIS pour cela. Mon inclination est d'utiliser un composant de script avec une expression regex dans du code C #, suivi d'une redirection. Pourtant, je me demandais s'il y avait un moyen dans SSIS de le faire sans recourir à C #.
Je n'ai pas eu beaucoup de chance pour trouver un moyen de savoir combien d'enregistrements n'ont pas de numéros de téléphone appropriés.
sql-server
sql-server-2008
query
rigoureusement
la source
la source
Réponses:
C'est une tâche ponctuelle. Écrivez une petite application ou sélectionnez simplement un script, utilisez C #, VB.NET, T-SQL ... et analysez tous les modèles manuellement. Vous découvrirez peut-être des modèles courants par les opérateurs qui ont entré ces données. Ajoutez un algorithme pour chaque modèle. Appliquez vos modèles à des données réelles dans une base de données. Supprimez tous les enregistrements "incorrects".
La chance.
AJOUTÉE:
En option, vous pouvez utiliser la base de données de numéros de téléphone pour vérifier la validité du numéro de personne si c'est possible.
la source
SSIS = SQL Server Integration Service - principalement un moyen d'intégrer des données provenant de nombreuses sources vers de nombreuses destinations. Quelque chose comme un moteur pour extraire des données d'Excel / CSV / Text. Quel autre fichier vient à l'esprit ... et le déplacer vers une base de données. Ou l'inverse.
Mais pour réellement sélectionner et manipuler des données, vous seriez toujours en mesure d'utiliser le T-SQL.
D'après ce que je sais, T-SQL n'a pas de composant regex pour vous aider, vous devrez donc utiliser un assembly .NET pour ce faire.
la source
Vous pouvez obtenir une estimation rapide via la clause WHERE suivante, car les numéros de téléphone ne doivent pas avoir de caractères alpha ... sauf si vous autorisez les numéros phonétiques, par ex. 1-800-ANT-FARM.
Vous ne pouvez pas faire de regex complexe en utilisant LIKE , mais vous pouvez obtenir une approximation proche.
Mon test:
la source
Cela dépend de ce qui est acceptable ou non dans un numéro de téléphone
Cela vous donne toutes les valeurs qui ne sont pas 100% numériques en utilisant NOT dans le modèle de recherche
Mais si vous autorisez
-
ou(000)
alors c'est plus complexe: besoin d'échantillons de données s'il vous plaîtla source
Essayez quelque chose comme ceci:
Si vous trouvez des modèles valides mais non couverts par la requête, ajoutez-les aux pièces et pièces affichées. Si vous trouvez quelque chose qui doit être ensemble dans les deux parties, modélisez-le après l'Extension CTE (qui est manquant ou une combinaison de Ext1 et Ext2). Si vous devez prendre en charge les numéros internationaux et qu'ils ont des modèles différents (ne correspondant pas aux États-Unis 3-3-4), vous aurez besoin d'une analyse et d'une corrélation appropriée pour que les bons codes de pays correspondent aux bons modèles. Par exemple, je sais que dans certaines régions du Brésil, il s'agit d'un numéro valide: +55 85 1234-5678 (indicatif de pays 55, indicatif régional à deux chiffres, puis motif 4-4).
Une autre technique pour vous aider à analyser vos données est la suivante:
Cela peut vous aider à comprendre à quoi ressemblent vos données en ignorant les différences réelles de numéro de téléphone entre chaque ligne et en faisant attention uniquement à la disposition et au nombre de chiffres. S'il y a beaucoup de caractères alpha, essayez de commencer à remplacer les modèles valides (tels que "ext") par une valeur introuvable dans la liste, afin de pouvoir réduire le reste de l'entrée parasite en quelque chose qui peut être analysé avec un similaire
Replace()
pour chaque lettre de l'alphabet.la source