এসকিউএল সার্ভারে কয়টি রেকর্ডের সঠিক ফোন নম্বর নেই তা জানার সর্বোত্তম উপায় কী?


11

আমার কাছে এমন একটি ক্ষেত্র রয়েছে যা লোকেরা historতিহাসিকভাবে একটি মান সরবরাহ করতে পারে। আমার রেকর্ডগুলি সনাক্ত করতে হবে যার উপযুক্ত মান নেই তাই আমি সেগুলি পরিষ্কার করতে পারি।

আমি এর জন্য এসএসআইএসের চারপাশে খুঁজছি। আমার প্রবণতাটি হ'ল কিছু সি # কোডে একটি রেগেক্স এক্সপ্রেশন সহ একটি স্ক্রিপ্ট উপাদান ব্যবহার করা এবং তারপরে পুনর্নির্দেশ করা। তবুও, আমি ভাবছিলাম যে এসআইএসআইএস-এ সি # এর অবলম্বন না করে এটি করার কোনও উপায় আছে কিনা?

কত রেকর্ডে উপযুক্ত ফোন নম্বর নেই তা জানার উপায় খুঁজে পাওয়ার জন্য আমার অনেক ভাগ্য হয় নি।


আপনার কাছে কি নমুনা তথ্য আছে?
gbn

1
আপনি দয়া করে উত্তর এখানে পর্যালোচনা করতে পারেন?
gbn

কীভাবে জিনিসগুলি গেল? আপনি কি এই বাধা পেরিয়েছেন?
এরিক

উত্তর:


7

এটি এক সময়ের কাজ। একটি ছোট অ্যাপ্লিকেশন লিখুন বা কেবল স্ক্রিপ্ট নির্বাচন করুন, সি #, ভিবি.এনইটি, টি এসকিউএল ... ব্যবহার করুন এবং ম্যানুয়ালি সমস্ত নিদর্শন বিশ্লেষণ করুন। সম্ভবত আপনি অপারেটরদের দ্বারা সাধারণ নিদর্শনগুলি খুঁজে পাবেন যারা এই ডেটাটি ইনপুট করেছেন। প্রতিটি প্যাটার্নের জন্য একটি অ্যালগরিদম যুক্ত করুন। আপনার নিদর্শনগুলি একটি ডেটাবেজে সত্যিকারের ডেটাতে প্রয়োগ করুন। সমস্ত "ভুল" রেকর্ড সরান।

ভাগ্য।

যোগ করেছেন:

বিকল্প হিসাবে, আপনি টেলিফোন নম্বরগুলির ডাটাবেস ব্যবহার করতে পারেন যদি সম্ভব হয় তবে ব্যক্তির সংখ্যাটির বৈধতা পরীক্ষা করতে পারেন।


আমি ব্যক্তিগতভাবে 'ভুল' নম্বরগুলি সরিয়ে ফেলব না ... কারণ এটি এমন একটি প্যাটার্ন হতে পারে যা আপনি বিবেচনা করেন নি (উদাহরণস্বরূপ, কেউ '+' দিয়ে উপসর্গ করছেন) ... এটি কয়েকবার ডিবাগিং মোডে চালাবেন যেখানে এটি কীটিকে খারাপ মান বলে বিবেচনা করে তা জানিয়ে দেয় এবং কোনও পরিবর্তন করার আগে এটি সন্ধান করে।
জো

@ জো সম্মত হন: আমি ব্যাকআপ ডেটাতে দুটি কলাম "নতুন" মান এবং "পুরানো" একটি ব্যবহার করেছি। এটি কেবল "শক্তিশালী" শব্দ ছিল :)
গারিক

4

এসএসআইএস = এসকিউএল সার্ভার ইন্টিগ্রেশন পরিষেবা - বেশিরভাগ উত্স থেকে বহু গন্তব্যে ডেটা সংহত করার বেশিরভাগ উপায়। এক্সেল / সিএসভি / পাঠ্য থেকে ডেটা নেওয়ার জন্য ইঞ্জিনের মতো কিছু .. অন্য কোন ফাইলটি মাথায় আসে .. এবং এটি একটি ডেটাবেসে স্থানান্তরিত করে। কাছাকাছি বা অন্যান্য উপায়.

তবে প্রকৃতপক্ষে ডেটা নির্বাচন এবং ম্যানিপুলেট করার জন্য আপনাকে এখনও টি-এসকিউএল ব্যবহার করতে সক্ষম / প্রয়োজন হবে।

আমি যা জানি টি-এসকিউএল থেকে আপনাকে সাহায্য করার জন্য কোনও রেইগেক্স উপাদান নেই, সুতরাং এটি করার জন্য আপনাকে একটি নেট সভা ব্যবহার করতে হবে।


1

নিম্নলিখিত নম্বরগুলির মাধ্যমে আপনি একটি দ্রুত অনুমান পেতে পারেন যেহেতু ফোন নম্বরগুলিতে আলফা অক্ষর না থাকা উচিত ... যদি না আপনি ফোনেটিক নম্বরগুলিকে অনুমতি না দেন, প্রাক্তন। 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
);

আপনি যদি এমন নিদর্শনগুলি খুঁজে পান যা বৈধ তবে কোয়েরিতে আচ্ছাদিত নয় তবে সেগুলি অংশ এবং টুকরাগুলিতে দেখানো হবে। আপনি যদি দুটি অংশে একসাথে থাকা দরকার এমন কিছু খুঁজে পান তবে এক্সটেনশন সিটিই (যা হয় নিখোঁজ বা এক্সট 1 এবং এক্সট 2 এর সংমিশ্রণ) এর পরে মডেল করুন। আপনার যদি আন্তর্জাতিক সংখ্যাগুলি সমর্থন করার প্রয়োজন হয় এবং এগুলির বিভিন্ন নিদর্শন রয়েছে (৩-৩-৪ মার্কিন যুক্তরাষ্ট্রের সাথে মেলে না) তবে সঠিক দেশের কোডগুলি সঠিক নিদর্শনগুলির সাথে মিলে যায় এমন জন্য আপনার কিছু বিশ্লেষণ এবং সঠিক সংযুক্তি প্রয়োজন। উদাহরণস্বরূপ, আমি জানি যে ব্রাজিলের কিছু অংশে, এটি একটি বৈধ সংখ্যা: +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;

প্রতিটি সারিটির মধ্যে প্রকৃত ফোন নম্বর পার্থক্য উপেক্ষা করে এবং কেবলমাত্র অঙ্কের ব্যবস্থা এবং গণনাতে মনোযোগ দিয়ে এটি আপনার ডেটা কেমন তা বুঝতে সহায়তা করতে পারে। যদি প্রচুর আলফা অক্ষর থাকে তবে তালিকার মধ্যে পাওয়া যায় না এমন মান দিয়ে বৈধ নিদর্শন (যেমন "এক্সট") প্রতিস্থাপনের চেষ্টা করুন, যাতে আপনি বাকী সমস্ত স্পুরিয়াস ইনপুটটিকে এমন কোনও কিছুতে ভেঙে ফেলতে পারেন যা একইরকম বিশ্লেষণ করা যেতে পারে Replace()বর্ণমালা প্রতিটি অক্ষরের জন্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.