Versuchen Sie so etwas:
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
);
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:
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;
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.