2016-08-10 5 views
6

에서 정규 표현식으로 문자열의 일부를 대체 나는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]+$'" 

같은 bash는 콘솔에 내 쿼리에서 REGEX를 사용할 수 있습니다하지만 어떻게 업데이트 할 수 있습니다와 REGEX 지원 설치 정규식을 사용하여 sqlite 쿼리 문자열?

+0

regexp_replace()와 같은 것을 의미합니까? –

+0

예. 그렇게. – rubo77

답변

3

기본적으로 Sqlite는 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를에

를 사용하여 컴파일하고있을 것입니다 이후

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

icu_replace.so 파일을 생성 다음과 같은 기능을 사용할 수 있습니다 : -

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

좋은 답변이지만 작동시키지 못했습니다. 확장을 컴파일하고로드 했으므로 regex_replace() 함수는 항상 두 번째 매개 변수를 반환하는 것으로 보입니다. –

+0

@KevinRoth 안녕하세요 kevin, 오타로 인해 미안합니다.이 방법으로 사용하십시오 - regex_replace ('\ bThe \ b', x, 'M')를 dual에서 선택하십시오. 나는 또한 대답을 편집했다. –