Ich habe ein Feld, das Menschen historisch nutzen könnten, um einen Wert frei zu liefern. Ich muss die Datensätze identifizieren, die keinen geeigneten Wert haben, damit ich sie bereinigen kann.
Ich habe mich in SSIS danach umgesehen. Meine Neigung ist es, eine Skriptkomponente mit einem regulären Ausdruck in einem C # -Code zu verwenden, gefolgt von einer Umleitung. Trotzdem habe ich mich gefragt, ob es in SSIS eine Möglichkeit gibt, dies zu tun, ohne auf C # zurückzugreifen.
Ich hatte nicht viel Glück, einen Weg zu finden, um herauszufinden, wie viele Datensätze keine geeigneten Telefonnummern haben.
sql-server
sql-server-2008
query
rsteckly
quelle
quelle
Antworten:
Es ist eine einmalige Aufgabe. Schreiben Sie eine kleine Anwendung oder wählen Sie einfach ein Skript aus, verwenden Sie C #, VB.NET, T-SQL ... und analysieren Sie alle Muster manuell. Vielleicht finden Sie allgemeine Muster von Operatoren heraus, die diese Daten eingegeben haben. Fügen Sie für jedes Muster einen Algorithmus hinzu. Wenden Sie Ihre Muster auf reale Daten in einer Datenbank an. Entfernen Sie alle "falschen" Datensätze.
Glück.
HINZUGEFÜGT:
Optional können Sie die Datenbank mit Telefonnummern verwenden, um die Gültigkeit von person2number zu überprüfen, wenn dies möglich ist.
quelle
SSIS = SQL Server Integration Service - meistens eine Möglichkeit, Daten aus vielen Quellen in viele Ziele zu integrieren. So etwas wie eine Engine, um Daten aus Excel / CSV / Text zu entnehmen. Welche andere Datei fällt mir ein? Und sie in eine Datenbank zu verschieben. Oder umgekehrt.
Um Daten tatsächlich auszuwählen und zu bearbeiten, müssen / müssen Sie dennoch T-SQL verwenden.
Soweit ich weiß, verfügt T-SQL über keine Regex-Komponente, die Ihnen helfen könnte. Daher müssten Sie dazu eine .NET-Assembly verwenden.
quelle
Sie können eine schnelle Schätzung über die folgende WHERE-Klausel erhalten, da Telefonnummern keine alphanumerischen Zeichen enthalten sollten ... es sei denn, Sie erlauben phonetische Zahlen, z. 1-800-ANT-FARM.
Mit LIKE können Sie keine komplexen regulären Ausdrücke erstellen , aber Sie können eine genaue Annäherung erhalten.
Mein Test:
quelle
Es hängt davon ab, was in einer Telefonnummer akzeptabel ist oder nicht
Dies gibt Ihnen alle Werte, die nicht 100% numerisch sind, indem Sie NOT im Suchmuster verwenden
Aber wenn Sie es erlauben
-
oder(000)
dann ist es komplexer: Benötigen Sie bitte Beispieldatenquelle
Versuchen Sie so etwas:
Wenn Sie Muster finden, die gültig sind, aber nicht von der Abfrage abgedeckt werden, fügen Sie sie den angezeigten Teilen und Teilen hinzu. Wenn Sie etwas finden, das in beiden Teilen zusammen sein muss, modellieren Sie es nach dem Erweiterungs-CTE (der entweder fehlt oder eine Kombination aus Ext1 und Ext2 ist). Wenn Sie internationale Nummern unterstützen müssen und diese unterschiedliche Muster haben (nicht mit den US 3-3-4 übereinstimmen), benötigen Sie eine Analyse und korrekte Korrelation, damit die richtigen Ländercodes mit den richtigen Mustern übereinstimmen. Ich weiß zum Beispiel, dass dies in bestimmten Teilen Brasiliens eine gültige Nummer ist: +55 85 1234-5678 (Landesvorwahl 55, Vorwahl zweistellig, dann 4-4 Muster).
Eine andere Technik, mit der Sie Ihre Daten analysieren können, ist folgende:
Dies kann Ihnen helfen, zu verstehen, wie Ihre Daten aussehen, indem Sie die tatsächlichen Telefonnummernunterschiede zwischen den einzelnen Zeilen ignorieren und nur auf die Anordnung und Anzahl der Ziffern achten. Wenn viele Alpha-Zeichen vorhanden sind, versuchen Sie, gültige Muster (z. B. "ext") durch einen Wert zu ersetzen, der nicht in der Liste enthalten ist, damit Sie den Rest der falschen Eingabe in etwas reduzieren können, das mit einem ähnlichen analysiert werden kann
Replace()
für jeden Buchstaben im Alphabet.quelle