2016-08-10 5 views
6

Я установил поддержку Regex сзаменить часть строки с REGEXP в sqlite3

apt-get install sqlite3 sqlite3-pcre 

теперь я могу использовать Regex в моих запросах на консоли Баш как

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

Но как я могу обновить строка с sqlite-запросом с использованием regex?

+0

Вы имеете в виду что-то вроде regexp_replace()? –

+0

Да. Как это. – rubo77

ответ

3

Sqlite по умолчанию не предоставляет функцию regex_replace. Вам нужно загрузить его как расширение. Вот как мне удалось это сделать.

Download this C code for the extension (icu_replace)

Собирать с помощью

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

@KevinRoth Привет, Кевин, извините за опечатку, используйте его таким образом - выберите regex_replace ('\ bThe \ b', x, 'M') из dual; Я также отредактировал ответ. –