mysql - एक sql क्वेरी में regex कैसे करें



innodb (2)

मेरे पास एक सरल कार्य है जहां मुझे स्ट्रिंग पात्रों के साथ शुरू होने वाले रिकॉर्ड और उनके बाद एक अंक की खोज करने की आवश्यकता है। मैं जो कोशिश कर रहा हूं वह यही है

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[d]%')

तथा

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[0-9]%')

लेकिन दोनों प्रश्न हमेशा एक null रिकॉर्ड देते हैं

trecord
-------
null

जैसे कि यदि मैं निम्नलिखित क्वेरी को निष्पादित करता हूं

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA%')

यह लौट आता है

trecord
-------
ALA0000
ALA0001
ALA0002

इसका अर्थ है कि मेरे पास एएलए के साथ शुरू होने वाले रिकॉर्ड और उसके बाद एक अंक है,

संपादित करें

मैं इसे विशिष्ट बनाने के लिए PHP MySQL और innodb इंजन का उपयोग कर रहा हूं।

https://src-bin.com


Answer #1

मुझे लगता है कि आप LIKE की जगह REGEXP उपयोग कर सकते हैं

SELECT trecord FROM `tbl` WHERE (trecord REGEXP '^ALA[0-9]')

Answer #2

मेरे मामले में (Oracle), यह WHERE REGEXP_LIKE(column, 'regex.*')here देखें:

एसक्यूएल समारोह

विवरण

REGEXP_LIKE

यह फ़ंक्शन एक पैटर्न के लिए एक वर्ण स्तंभ खोजता है। इस फ़ंक्शन का उपयोग उस पंक्ति में करें, जहाँ आपके द्वारा निर्दिष्ट नियमित अभिव्यक्ति से मेल खाती पंक्तियों को वापस करने के लिए एक क्वेरी का खंड है।

...

REGEXP_REPLACE

यह फ़ंक्शन वर्ण स्तंभ में एक पैटर्न की खोज करता है और आपके द्वारा निर्दिष्ट पैटर्न के साथ उस पैटर्न की प्रत्येक घटना को प्रतिस्थापित करता है।

...

REGEXP_INSTR

यह फ़ंक्शन नियमित अभिव्यक्ति पैटर्न की दी गई घटना के लिए एक स्ट्रिंग खोजता है। आप निर्दिष्ट करते हैं कि आप किस घटना को खोजना चाहते हैं और खोज करने के लिए प्रारंभ स्थिति। यह फ़ंक्शन एक पूर्णांक देता है जो स्ट्रिंग में स्थिति का संकेत देता है जहां मैच पाया जाता है।

...

REGEXP_SUBSTR

यह फ़ंक्शन आपके द्वारा निर्दिष्ट नियमित अभिव्यक्ति पैटर्न से मेल खाते हुए वास्तविक विकल्प को लौटाता है।

(बेशक, REGEXP_LIKE केवल खोज स्ट्रिंग वाले प्रश्नों से मेल खाता है, इसलिए यदि आप एक पूर्ण मिलान चाहते हैं, तो आपको शुरुआत ( ^ ) और अंत ( $ ) मैच के लिए '^$' का उपयोग करना होगा, जैसे: '^regex.*$' )





innodb