Mam dziedzinę, z której ludzie historycznie mogliby korzystać, aby swobodnie dostarczać wartość. Muszę zidentyfikować rekordy, które nie mają odpowiedniej wartości, aby je wyczyścić.
Rozglądałem się w tym celu w SSIS. Moją skłonnością jest użycie komponentu skryptu z wyrażeniem regularnym w jakimś kodzie C #, a następnie przekierowania. Mimo to zastanawiałem się, czy jest jakiś sposób, aby SSIS to zrobić bez uciekania się do C #.
Nie miałem szczęścia znaleźć sposobu, aby dowiedzieć się, ile rekordów nie ma odpowiednich numerów telefonów.
sql-server
sql-server-2008
query
rsteckly
źródło
źródło
Odpowiedzi:
To jednorazowe zadanie. Napisz małą aplikację lub po prostu wybierz skrypt, użyj C #, VB.NET, T-SQL ... i ręcznie przeanalizuj wszystkie wzorce. Być może poznasz wspólne wzorce operatorów, którzy wprowadzili te dane. Dodaj algorytm dla każdego wzorca. Zastosuj swoje wzorce do rzeczywistych danych w bazie danych. Usuń wszystkie „złe” rekordy.
Szczęście.
DODANY:
Opcjonalnie możesz użyć bazy numerów telefonów, aby sprawdzić ważność person2number, jeśli to możliwe.
źródło
SSIS = SQL Server Integration Service - głównie sposób integracji danych z wielu źródeł do wielu miejsc docelowych. Coś w rodzaju silnika do pobierania danych z programu excel / csv / text ... co innego przychodzi na myśl ... i przenoszenia go do bazy danych. Albo na odwrót.
Ale aby faktycznie wybierać i manipulować danymi, nadal będziesz / mógł być zobowiązany do używania T-SQL.
Z tego, co wiem, T-SQL nie ma żadnego składnika wyrażenia regularnego, który by ci pomógł, więc będziesz musiał użyć do tego zestawu .NET.
źródło
Możesz szybko oszacować za pomocą następującej klauzuli WHERE, ponieważ numery telefonów nie powinny zawierać znaków alfabetu ... chyba że zezwolisz na liczby fonetyczne, np. 1-800-ANT-FARM.
Nie można wykonać złożonego wyrażenia regularnego przy użyciu LIKE , ale można uzyskać dokładne przybliżenie.
Mój test:
źródło
To zależy od tego, co jest dopuszczalne, czy nie w numerze telefonu
Daje to wszystkie wartości, które nie są w 100% numeryczne przy użyciu NOT we wzorcu wyszukiwania
Ale jeśli na to pozwolisz
-
lub(000)
będzie to bardziej skomplikowane: potrzebujesz przykładowych danychźródło
Wypróbuj coś takiego:
Jeśli znajdziesz wzory, które są prawidłowe, ale nie są objęte zapytaniem, dodaj je do pokazanych części i elementów. Jeśli znajdziesz coś, co musi być razem w dwóch częściach, zamodeluj to po rozszerzeniu CTE (którego brakuje albo kombinacji Ext1 i Ext2). Jeśli potrzebujesz obsługi numerów międzynarodowych, a mają one różne wzorce (niezgodne z amerykańskimi 3-3-4), potrzebujesz analizy i odpowiedniego skorelowania, aby dopasować odpowiednie kody krajów do odpowiednich wzorców. Na przykład wiem, że w niektórych częściach Brazylii jest to prawidłowy numer: +55 85 1234-5678 (kod kraju 55, numer kierunkowy dwie cyfry, a następnie wzór 4-4).
Kolejną techniką, która pomaga analizować dane, jest:
Pomoże Ci to zrozumieć, jakie są twoje dane, ignorując rzeczywiste różnice numerów telefonów między poszczególnymi wierszami i zwracając uwagę tylko na układ i liczbę cyfr. Jeśli jest dużo znaków alfanumerycznych, spróbuj rozpocząć zastępowanie prawidłowych wzorców (takich jak „ext”) wartością, której nie ma na liście, abyś mógł zawinąć resztę fałszywych danych wejściowych w coś, co można przeanalizować za pomocą podobnego
Replace()
dla każdej litery w alfabecie.źródło