MySQL के FIND_IN_SET
, लेकिन आपके उदाहरण के मामले में (जहां आपको केवल यह जानने की आवश्यकता है कि क्या कोई मान अल्पविराम से अलग किए गए सेट में निहित है) Oracle का REGEX_COUNT
रेगेक्स '^([^,]+,)*your_value(,[^,]+)*$'
के साथ फिट होगा।
निम्नलिखित SQL प्रश्नों की जाँच करें (Oracle के लिए)...
संख्याओं वाले उदाहरण
नंबर खोजें 1
सेट में:[1,2,3,4,5,6,11,12,13]
SELECT
CASE WHEN REGEXP_COUNT('1,2,3,4,5,6,11,12,13', '^([^,]+,)*1(,[^,]+)*$', 1, 'i') > 0
THEN 1 ELSE 0
END AS cnt
FROM DUAL;
रिटर्न 1
सही ढंग से
नंबर खोजें 1
सेट में:[111,222,333]। इस मामले में INSTR नकारात्मक रिपोर्ट करने में विफल रहेगा।
SELECT
CASE WHEN REGEXP_COUNT('111,222,333', '^([^,]+,)*1(,[^,]+)*$', 1, 'i') > 0
THEN 1 ELSE 0
END AS cnt
FROM DUAL;
रिटर्न 0
सही ढंग से
स्ट्रिंग वाले उदाहरण
'John'
के लिए खोजें नामों के समूह में:
SELECT
CASE WHEN REGEXP_COUNT('john,peter,jim,kelly,laura,bill,tom,foo,bar', '^([^,]+,)*John(,[^,]+)*$', 1, 'i') > 0
THEN 1 ELSE 0
END as cnt
FROM DUAL;
रिटर्न 1
सही ढंग से
लेकिन अगर आप 'a'
letter अक्षर सर्च करते हैं , यह सही ढंग से शून्य लौटाएगा (INSTR फिर से विफल हो जाएगा)।
SELECT
CASE WHEN REGEXP_COUNT('john,peter,jim,kelly,laura,bill,tom,foo,bar', '^([^,]+,)*a(,[^,]+)*$', 1, 'i') > 0
THEN 1 ELSE 0
END as cnt
FROM DUAL;
रिटर्न 0
सही ढंग से
मुझे पता है कि इस प्रश्न का उत्तर बहुत पहले दिया जा चुका है, लेकिन यह खोज परिणामों में अच्छी तरह से रैंक करता है और शायद अन्य लोगों की मदद कर सकता है जो Oracle के INSTR
की तुलना में एक सादे लेकिन अधिक सही समाधान की तलाश में हैं। समारोह।
बूलियन एक्सप्रेशन
बूलियन अभिव्यक्तियों का उपयोग करना भी संभव है, जैसे OR
या AND
।
OR
. का उपयोग करने वाला एक उदाहरण निम्नलिखित है:
SELECT
CASE WHEN REGEXP_COUNT('john,peter,jim,kelly,laura,bill,tom,foo,bar', '^([^,]+,)*(helen|peter)(,[^,]+)*$', 1, 'i') > 0
THEN 1 ELSE 0
END as cnt
FROM DUAL;
रिटर्न 1
सही ढंग से, जैसा कि इसे "पीटर" मिला (या तो "हेलेन" . के लिए खोजें या "पीटर" )।
AND
के लिए दृष्टिकोण थोड़ा अलग है (CASE अभिव्यक्ति में संशोधन करता है रेगेक्स . के बजाय ):
SELECT
CASE WHEN
REGEXP_COUNT('john,peter,jim,kelly,laura,bill,tom,foo,bar', '^([^,]+,)*john(,[^,]+)*$', 1, 'i') > 0 AND
REGEXP_COUNT('john,peter,jim,kelly,laura,bill,tom,foo,bar', '^([^,]+,)*peter(,[^,]+)*$', 1, 'i') > 0
THEN 1 ELSE 0
END as cnt
FROM DUAL;
उपरोक्त क्वेरी "जॉन" . दोनों के लिए खोज करती है और "पीटर" . AND
REGEXP_COUNT
. की नकल करके ऑपरेशन को आसानी से लागू किया जा सकता है CASE
. में अभिव्यक्ति सिंटैक्स, हालांकि बदले में एक छोटे से प्रदर्शन दंड के साथ।