2016-08-10 14 views
6

में regexp के साथ एक तार का एक हिस्सा की जगह मैंsqlite3

apt-get install sqlite3 sqlite3-pcre 

अब मैं की तरह

DB="somedb.db" 
REGEX_EXTENSION="SELECT load_extension('/usr/lib/sqlite3/pcre.so');" 
sqlite3 $DB "$REGEX_EXTENSION select * from sometable where name REGEXP '^[a-z]+$'" 

बैश कंसोल पर मेरी प्रश्नों में regex का उपयोग कर सकते हैं लेकिन मैं कैसे अद्यतन कर सकते हैं साथ REGEX समर्थन स्थापित regex का उपयोग कर एक sqlite क्वेरी के साथ एक स्ट्रिंग?

+0

आपका मतलब regexp_replace() जैसा है? –

+0

हां। उसके जैसा। – rubo77

उत्तर

3

डिफ़ॉल्ट रूप से स्क्लाइट regex_replace फ़ंक्शन प्रदान नहीं करता है। आपको इसे एक एक्सटेंशन के रूप में लोड करने की आवश्यकता है। यहां बताया गया है कि मैं इसे कैसे करने में कामयाब रहा।

Download this C code for the extension (icu_replace)

निम्न आदेश पोस्ट के ऊपर उल्लेख आदेश चला गया है runn

gcc --shared -fPIC -I sqlite-autoconf-3071100 icu_replace.c -o icu_replace.so 

और sqlite3 में उपयोग कर इसे संकलित करें और इस के बाद आप हो जाएगा icu_replace.so

SELECT load_extension(' path to icu_replace.so', 'sqlite3_extension_init') from dual; 

एक फ़ाइल बनाने के इस तरह के एक समारोह का उपयोग करने में सक्षम: -

select regex_replace('\bThe\b',x,'M') from dual; 
+0

अच्छा जवाब, लेकिन मैं इसे काम करने में सक्षम नहीं था। यह संकलन को संकलित और लोड करने के लिए मिला, लेकिन regex_replace() फ़ंक्शन हमेशा दूसरे पैरामीटर को वापस करने लगता है। –

+0

@ केविनरोथ हाय केविन, टाइपो के लिए खेद है, इसे इस तरह से उपयोग करें - दोहरी से regex_replace ('\ bThe \ b', x, 'm') का चयन करें; मैंने जवाब भी संपादित किया है। –