यह पता लगाने का सबसे अच्छा तरीका क्या है कि कितने रिकॉर्ड SQL सर्वर में उचित फोन नंबर नहीं है?


11

मेरे पास एक ऐसा क्षेत्र है जो लोग ऐतिहासिक रूप से एक मूल्य की आपूर्ति करने के लिए उपयोग कर सकते हैं। मुझे उन अभिलेखों की पहचान करने की आवश्यकता है जिनके पास उचित मूल्य नहीं है, इसलिए मैं उन्हें साफ कर सकता हूं।

मैं इसके लिए SSIS में चारों ओर देख रहा हूं। मेरा झुकाव कुछ सी # कोड में एक रेगेक्स एक्सप्रेशन के साथ एक स्क्रिप्ट घटक का उपयोग करना है, इसके बाद रीडायरेक्ट होता है। फिर भी, मैं सोच रहा था कि क्या CIS का सहारा लिए बिना SSIS में ऐसा करने का कोई तरीका था।

मेरे पास बहुत सारे भाग्य नहीं हैं जो यह पता लगाने का एक तरीका है कि कितने रिकॉर्ड उपयुक्त फोन नंबर नहीं हैं।


क्या आपके पास नमूना डेटा है?
gbn

1
क्या आप यहां दिए गए उत्तरों की समीक्षा कर सकते हैं?
gbn

चीजें कैसे हुईं? क्या आपने इस बाधा को पार कर लिया?
एरिक

जवाबों:


7

यह एक समय का काम है। एक छोटा अनुप्रयोग लिखें या बस स्क्रिप्ट का चयन करें, C #, VB.NET, T-SQL ... का उपयोग करें और मैन्युअल रूप से सभी पैटर्न का विश्लेषण करें। हो सकता है कि आपको उन ऑपरेटरों द्वारा सामान्य पैटर्न मिल जाएंगे जिन्होंने इस डेटा को इनपुट किया था। हर पैटर्न के लिए एक एल्गोरिथ्म जोड़ें। एक डेटाबेस में वास्तविक डेटा के लिए अपने पैटर्न लागू करें। सभी "गलत" रिकॉर्ड निकालें।

भाग्य।

जोड़े गए:

विकल्प के रूप में, यदि संभव हो तो आप person2number वैधता की जांच करने के लिए टेलीफोन नंबरों के डेटाबेस का उपयोग कर सकते हैं।


मैं व्यक्तिगत रूप से 'गलत' नंबरों को नहीं हटाऊंगा ... क्योंकि यह एक ऐसा पैटर्न हो सकता है, जिस पर आपने विचार नहीं किया था (जैसे, किसी ने इसे '+' के साथ उपसर्ग किया है ... इसे डिबगिंग मोड में कुछ बार चलाएं जहां यह रिपोर्ट करता है कि यह एक बुरा मूल्य क्या मानता है, और इससे पहले कि आप इसमें कोई संशोधन करें, इसे देखें।
जो

@ जो सहमत हैं: मैंने बैकअप डेटा के लिए दो कॉलम "नया" मान और "पुराना" का उपयोग किया। यह सिर्फ "मजबूत" शब्द था :)
गाइक

4

SSIS = SQL सर्वर एकीकरण सेवा - अधिकतर स्रोतों से डेटा को कई गंतव्यों तक एकीकृत करने का एक तरीका है। एक्सेल / सीएसवी / टेक्स्ट से डेटा लेने के लिए एक इंजन की तरह कुछ .. जो अन्य फ़ाइल को ध्यान में आता है .. और इसे एक डेटाबेस में स्थानांतरित करें। या फिर इसके विपरीत।

लेकिन वास्तव में डेटा का चयन और हेरफेर करने के लिए आप अभी भी टी-एसक्यूएल का उपयोग करने में सक्षम होंगे / आवश्यक होंगे।

जो मैं जानता हूं कि टी-एसक्यूएल में आपकी मदद करने के लिए कोई रेगेक्स घटक नहीं है, इसलिए आपको ऐसा करने के लिए .NET असेंबली का उपयोग करना होगा।


1

जब तक आप फ़ोन वर्णों में अल्फा वर्ण नहीं होना चाहिए, तब तक आप निम्नलिखित WHERE क्लॉज़ के माध्यम से एक त्वरित अनुमान प्राप्त कर सकते हैं ... जब तक कि आप ध्वन्यात्मक संख्याओं की अनुमति न दें, पूर्व। 1-800-चींटी-कृषि।

WHERE phonenumber LIKE '%[a-zA-Z]%'

आप LIKE का उपयोग करके जटिल रेगेक्स नहीं कर सकते हैं , लेकिन आप एक निकट सन्निकटन प्राप्त कर सकते हैं।

मेरा इम्तिहान:

WITH cte AS (
    SELECT id, phone
    FROM (
        VALUES
            (1, '1234567890'),
            (2, '4567890'),
            (3, '(123) 456-7890'),
            (4, '123-456-7890'),
            (5, '123.456.7890'),
            (6, 'Testing')
    )
    AS MyTable(id, phone)
)
SELECT *
FROM cte
WHERE phone LIKE '%[a-zA-Z]%'

1

यह निर्भर करता है कि फोन नंबर में क्या स्वीकार्य है या नहीं

यह आपको सभी मान देता है जो खोज पैटर्न में नहीं का उपयोग करके 100% संख्यात्मक नहीं हैं

WHERE phonenumber LIKE '%[^0-9]%'

लेकिन अगर आप अनुमति देते हैं -या (000)फिर यह अधिक जटिल है: कृपया नमूना डेटा की आवश्यकता है


0

कुछ इस तरह की कोशिश करो:

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()वर्णमाला के प्रत्येक अक्षर के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.