Bunun gibi bir şey deneyin:
WITH AreaCode (A) AS (
SELECT '[0-9][0-9][0-9][-.]'
UNION ALL SELECT '([0-9][0-9][0-9])-'
), Prefix (P) AS (
SELECT '[0-9][0-9][0-9]-'
), Last4 (L) AS (
SELECT '[0-9][0-9][0-9][0-9]'
), Ext1 (E1) AS (
SELECT ' x'
UNION ALL SELECT ' Ext.'
UNION ALL SELECT ' ext'
), Ext2 (E2) AS (
UNION ALL SELECT '[0-9][0-9]'
UNION ALL SELECT '[0-9][0-9][0-9]'
UNION ALL SELECT '[0-9][0-9][0-9][0-9]'
), Extension (E) AS (
SELECT ''
UNION ALL SELECT E1 + E2 FROM Ext1 CROSS JOIN Ext2
),
SELECT *
FROM
YourTable Y
WHERE NOT EXISTS (
SELECT *
FROM
AreaCode
CROSS JOIN Prefix
CROSS JOIN Last4
CROSS JOIN Extension
WHERE
Y.PhoneNumber LIKE AreaCode + Prefix + Last4 + Extension
);
Geçerli ancak sorgu tarafından kapsanmayan desenler bulursanız, bunları gösterilen parçalara ve parçalara ekleyin. İki bölümde birlikte olması gereken bir şey bulursanız, uzantı CTE'sinden sonra (eksik veya Ext1 ve Ext2'nin bir kombinasyonu) modelleyin. Uluslararası numaraları desteklemeniz gerekiyorsa ve farklı kalıpları varsa (ABD 3-3-4 ile eşleşmiyor), doğru ülke kodlarının doğru kalıplarla eşleşmesi için bazı analizlere ve uygun korelasyona ihtiyacınız olacaktır. Örneğin, Brezilya'nın bazı bölgelerinde bu geçerli bir sayı olduğunu biliyorum: +55 85 1234-5678 (ülke kodu 55, alan kodu iki basamak, sonra 4-4 desen).
Verilerinizi analiz etmenize yardımcı olacak başka bir teknik şudur:
WITH Patterns (P) AS (
SELECT
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(
PhoneNumber,
'1', '0'), '2', '0'), '3', '0'), '4', '0'),
'5', '0'), '6', '0'), '7', '0'), '8', '0'), '9', '0'
)
)
SELECT P, Count(*)
FROM Patterns
GROUP BY P;
Bu, her satır arasındaki gerçek telefon numarası farklarını göz ardı ederek ve yalnızca rakamların düzenine ve sayısına dikkat ederek verilerinizin nasıl olduğunu anlamanıza yardımcı olabilir. Çok fazla alfa karakter varsa, geçerli kalıpları ("ext" gibi) listede bulunmayan bir değerle değiştirmeye başlayın, böylece sahte girdinin geri kalanını benzer bir yöntemle analiz edilebilecek bir şeyle daraltabilirsiniz. Replace()
alfabedeki her harf için.