Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कम से कम X वर्णों को साझा करने वाले सभी तार खोजें, समानता के अनुसार क्रम दें

यह दृष्टिकोण एक संख्या जनरेटर का उपयोग करता है और फिर ओवरलैप की लंबाई का परीक्षण करता है:

select x.drug_name, x2.drug_name, MAX(c.seqnum) as OverlapLen
from x cross join
     x x2 cross join
     (select ROW_NUMBER() over (order by (select NULL)) seqnum
      from INFORMATION_SCHEMA.COLUMNS c
     ) c
where LEFT(x.drug_name, c.seqnum) = LEFT(x2.drug_name, c.seqnum) and
      len(x.drug_name) >= c.seqnum and len(x2.drug_name) >= c.seqnum
group by x.drug_name, x.drug_name
order by x.drug_name, OverlapLen desc

यह मानता है कि information_schema.columns लंबी दवाओं के नामों के लिए पर्याप्त पंक्तियाँ हैं।

यह जुड़ता है x खुद के लिए और फिर संख्याओं की सूची में शामिल हो जाता है। where खंड तीन स्थितियों की जाँच कर रहा है:(1) कि प्रत्येक दवा के नाम का बायाँ भाग seqnum तक समान है; (2) कि प्रत्येक दवा के नाम की लंबाई seqnum से कम या उसके बराबर है।

एकत्रीकरण तब प्रत्येक जोड़ी लेता है और seqnum का उच्चतम मान चुनता है -- यह सबसे लंबा सबस्ट्रिंग मैच होना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .NET से एसएसआईएस पैकेज कैसे निष्पादित करें?

  2. SQL वर्चर में किसी निश्चित सबस्ट्रिंग की घटनाओं की संख्या की गणना कैसे करते हैं?

  3. त्रुटि:कॉलम DOB का प्रकार UNPIVOT सूची में निर्दिष्ट अन्य कॉलम के प्रकार के साथ विरोध करता है

  4. SQL सर्वर (T-SQL) में एकल फ़ाइल समूह में एकाधिक विभाजन कैसे मैप करें

  5. SQL सर्वर सिमेंटिक सर्च के साथ विंडोज फाइल सिस्टम पर दस्तावेजों को स्टोर और विश्लेषण करना सीखें - भाग 1