2016-08-10 36 views
6

Tôi đã cài đặt hỗ trợ regex vớithay thế một phần của một chuỗi với REGEXP trong sqlite3

apt-get install sqlite3 sqlite3-pcre 

bây giờ tôi có thể sử dụng regex trong các truy vấn của tôi trên bash console như

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

Nhưng làm thế nào tôi có thể cập nhật một chuỗi với một truy vấn sqlite bằng cách sử dụng regex?

+0

Bạn có nghĩa là một cái gì đó như regexp_replace()? –

+0

Có. Như thế. – rubo77

Trả lời

3

Sqlite theo mặc định không cung cấp chức năng regex_replace. Bạn cần tải nó dưới dạng tiện ích mở rộng. Đây là cách tôi quản lý để làm điều đó.

Download this C code for the extension (icu_replace)

Biên dịch nó bằng cách sử

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

Và trong sqlite3 runn sau lệnh bài ở trên đã đề cập lệnh đã chạy và tạo ra một tập tin icu_replace.so

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

Sau này bạn sẽ có có thể sử dụng một chức năng như sau: -

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

Câu trả lời hay, nhưng tôi không thể làm cho nó hoạt động. Có nó để biên dịch và nạp phần mở rộng, nhưng hàm regex_replace() dường như luôn trả về tham số thứ hai. –

+0

@KevinRoth Xin chào kevin, xin lỗi vì lỗi đánh máy, sử dụng nó theo cách này - chọn regex_replace ('\ bThe \ b', x, 'M') từ kép; Tôi cũng đã chỉnh sửa câu trả lời. –

Các vấn đề liên quan