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

खोजें कि क्या संख्या एक व्यंजक में समाहित है जैसे:1-3,5,10-15,20

यह सब SQL में REGEXP_SUBSTR फ़ंक्शन और पदानुक्रमित प्रश्नों के उपयोग द्वारा करना संभव है:

with list_of_ids as (
select regexp_substr(a, '[[:digit:]]+',1, 1) as lot1
     , nvl( regexp_substr(a, '(-)([[:digit:]]+)',1, 1, 'i', '2')
          , regexp_substr(a, '[[:digit:]]+',1, 1)) as lot2
  from (select regexp_substr('1-3,5,10-15,20' , '[^,]+', 1, level) as a
          from dual
       connect by regexp_substr('1-3,5,10-15,20' , '[^,]+', 1, level) is not null
               )
       )
select a.*
  from products a
  join list_of_ids b
    on a.lot between b.lot1 and b.lot2

हालांकि, मुझे इस बात पर जोर देना चाहिए कि आपके डेटाबेस को सामान्य रूप से सामान्य करना ही रास्ता है। यह समाधान अच्छी तरह से स्केल नहीं कर सकता है और अत्यधिक अनावश्यक मात्रा में काम करता है।

यह इस तरह काम करता है:

पहले अपने डेटा को अल्पविराम पर विभाजित करें:

SQL>  select regexp_substr('1-3,5,10-15,20', '[^,]+', 1, level) as a
  2     from dual
  3  connect by regexp_substr('1-3,5,10-15,20', '[^,]+', 1, level) is not null
  4          ;

A
--------------
1-3
5
10-15
20

इसके बाद, इसे तालिका में शामिल करने से पहले बीच में उपयोग करने के लिए न्यूनतम और अधिकतम लॉट प्रदान करने के लिए इसे हाइफ़न पर विभाजित करें। एनवीएल यह सुनिश्चित करने के लिए है कि हमेशा अधिकतम हो।

SQL> select regexp_substr(a, '[[:digit:]]+',1, 1) as lot1
  2       , nvl( regexp_substr(a, '(-)([[:digit:]]+)',1, 1, 'i', '2')
  3             , regexp_substr(a, '[[:digit:]]+',1, 1)) as lot2
  4    from (select regexp_substr('1-3,5,10-15,20' , '[^,]+', 1, level) as a
  5            from dual
  6         connect by regexp_substr('1-3,5,10-15,20' , '[^,]+', 1, level) is not null
  7                 )
  8         ;

LOT1           LOT2
-------------- --------------
1              3
5              5
10             15
20             20

SQL>

यहाँ पूरी क्वेरी के साथ एक कार्यशील SQL Fiddle है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle regexp_replace द्वारा अंतरिक्ष से अलग की गई सूची से डुप्लिकेट कैसे निकालें?

  2. ओरेकल एसक्यूएल प्लस एसक्यूएल फाइल में कमांड कैसे खत्म करें?

  3. आदेश के साथ Oracle सम्मिलित करें

  4. JDBC Oracle - क्वेरी के लिए योजना की व्याख्या करें

  5. एसक्यूएल, डिलीट कैस्केड पर और अपडेट कैस्केड पर