कुछ इस तरह की कोशिश करो:
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
);
यदि आपको ऐसे पैटर्न मिलते हैं जो मान्य हैं, लेकिन क्वेरी द्वारा कवर नहीं किए गए हैं, तो उन्हें दिखाए गए भागों और टुकड़ों में जोड़ें। यदि आपको ऐसा कुछ मिलता है, जो दो भागों में एक साथ होना चाहिए, तो इसे एक्सटेंशन CTE (जो या तो गायब है या Ext1 और Ext2 का संयोजन है) के बाद मॉडल करें। यदि आपको अंतर्राष्ट्रीय संख्याओं का समर्थन करने की आवश्यकता है, और उनके पास अलग-अलग पैटर्न हैं (यूएस 3-3-4 से मेल नहीं खाते) तो आपको सही पैटर्न के साथ सही देश कोड बनाने के लिए कुछ विश्लेषण और उचित सहसंबंध की आवश्यकता होगी। उदाहरण के लिए, मुझे पता है कि ब्राजील के कुछ हिस्सों में, यह एक वैध संख्या है: +55 85 1234-5678 (देश कोड 55, क्षेत्र कोड दो अंक, फिर 4-4 पैटर्न)।
आपके डेटा का विश्लेषण करने में आपकी मदद करने के लिए एक और तकनीक यह है:
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;
यह आपको यह समझने में मदद कर सकता है कि प्रत्येक पंक्ति के बीच वास्तविक फोन नंबर के अंतर को अनदेखा करके और अंकों की व्यवस्था और गिनती पर ध्यान देने से आपका डेटा कैसा है। यदि बहुत सारे अल्फा वर्ण हैं, तो सूची में नहीं पाए गए मान के साथ मान्य पैटर्न (जैसे "ext") को बदलना शुरू करने का प्रयास करें, ताकि आप बाकी के स्पुचुअल इनपुट को किसी ऐसी चीज़ में ढो सकें जिसका एक समान विश्लेषण किया जा सके Replace()
वर्णमाला के प्रत्येक अक्षर के लिए।