2016-08-10 38 views
6

yılında RegExp ile bir dize bir kısmını yerine benSqlite3

apt-get install sqlite3 sqlite3-pcre 
şimdi

ben

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]+$'" 

gibi bash konsolda benim sorgularda normal ifadeler kullanabilirsiniz Ama nasıl güncelleyebilir ile REGEX desteği yüklü regex kullanarak bir sqlite sorgusu olan bir dize?

+0

Regexp_replace() gibi bir şeyden mi bahsediyorsunuz? –

+0

Evet. Bunun gibi. – rubo77

cevap

3

Varsayılan olarak Sqlite, regex_replace işlevini sağlamaz. Bir uzantı olarak yüklemeniz gerekiyor. İşte böyle yapmayı başardım.

Download this C code for the extension (icu_replace)

aşağıdaki komuta yukarıdaki komut çalıştırıldıktan sözü runn

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

Ve sqlite3 içinde

kullanarak derlemek ve olacaksın Bundan sonra

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

icu_replace.so bir dosya oluşturmak gibi bir işlevi kullanabilmek için: -

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

İyi cevap, ama işe yaramadı. Uzantıyı derlemek ve yüklemek için aldım, ancak regex_replace() işlevi her zaman ikinci parametreyi döndürüyor gibi görünüyor. –

+0

@KevinRoth Merhaba kevin, yazım hatası için özür dilerim, bu şekilde kullanın - dualden regex_replace ('\ bThe \ b', x, 'M') öğesini seçin; Ben de cevabı düzenledim. –