Coba sesuatu seperti ini:
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
);
Jika Anda menemukan pola yang valid tetapi tidak tercakup oleh permintaan, tambahkan mereka ke bagian-bagian dan potongan-potongan yang ditunjukkan. Jika Anda menemukan sesuatu yang perlu disatukan dalam dua bagian, maka model setelah CTE Ekstensi (yang hilang atau kombinasi dari Ext1 dan Ext2). Jika Anda perlu mendukung angka internasional, dan mereka memiliki pola yang berbeda (tidak cocok dengan AS 3-3-4) maka Anda akan memerlukan beberapa analisis dan korelasi yang tepat untuk membuat kode negara yang tepat cocok dengan pola yang tepat. Misalnya, saya tahu bahwa di beberapa bagian Brasil, ini adalah angka yang valid: +55 85 1234-5678 (kode negara 55, kode area dua digit, kemudian pola 4-4).
Teknik lain untuk membantu Anda menganalisis data Anda adalah ini:
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;
Ini dapat membantu Anda memahami seperti apa data Anda dengan mengabaikan perbedaan nomor telepon aktual antara setiap baris dan hanya memperhatikan pengaturan dan jumlah digit. Jika ada banyak karakter alfa, cobalah untuk mulai mengganti pola yang valid (seperti "ext") dengan nilai yang tidak ditemukan dalam daftar, sehingga Anda dapat menciutkan sisa input palsu menjadi sesuatu yang dapat dianalisis dengan serupa Replace()
untuk setiap huruf dalam alfabet.