SQLite의 정규식 연산자

Bilal Shahid 2023년6월21일
  1. 정규식이란 무엇입니까
  2. SQLite에서 Regex를 설치하는 방법
  3. SQLite의 쿼리에서 Regex 사용
  4. SQLite의 명령줄에서 Regex 사용
  5. SQLite에서 Regex의 대안
SQLite의 정규식 연산자

함수를 사용하면 SQLite가 훨씬 쉬워지고 데이터 처리가 훨씬 빨라지는 경향이 있습니다. 이에 대한 확장은 쿼리를 줄이고 사용자가 데이터를 더 빠르게 처리할 수 있도록 하여 더 나은 사용자 경험을 제공하는 데 자주 사용되는 정규식 연산자입니다.

정규식이란 무엇입니까

‘Regex’는 사용자가 정규식을 참조하고자 할 때 사용하는 절입니다. 주요 목적은 사용자 정의 함수를 호출하여 데이터베이스에 로드하고 regex 절 뒤에 추가되었을 수 있는 몇 가지 추가 작업을 수행하는 것입니다.

이 기능은 사용자가 필요로 하는 모든 활동을 수행할 수 있습니다. 그러나 regex를 사용하기 전에 함수를 정의하고 로드해야 한다는 점에 유의해야 합니다.

미리 수행하지 않으면 regex 절을 사용하면 오류 메시지가 표시됩니다. 기본적으로 연동되는 기능이 없기 때문입니다.

따라서 효과적으로 사용하려면 응용 프로그램에서 함수를 만든 다음 SQLite 드라이버에 대한 콜백 링크를 제공해야 합니다.

SQLite에서 Regex를 설치하는 방법

대부분의 경우 SQLite의 regex는 패키지와 함께 제공됩니다. 일부 SQLite 배포판 또는 GUI 도구에서 사용할 수 있지만 모든 경우에 사용할 수 있는 것은 아닙니다.

따라서 설치해야 할 가능성이 높습니다. 다음은 이를 수행하는 방법에 대한 단계별 자습서입니다.

  1. 터미널에 다음 코드를 작성합니다.

    sudo apt-get install sqlite3-pcre
    
  2. 이제 Perl 정규식이 로드 가능한 파일에 설치되었습니다. /usr/lib/sqlite3/pcre.so에서 찾을 수 있습니다.

  3. 사용하려면 다음을 사용하여 로드해야 합니다.

    .load /usr/lib/sqlite3/pcre.so
    

이제 SQLite에서 regex 절을 쉽게 사용할 수 있습니다. 파일을 제대로 사용하려면 매번 파일을 로드해야 한다는 점에 유의해야 합니다.

이를 해결하는 방법은 ~/.sqliter에 줄을 추가하는 것입니다. 이렇게 하면 SQLite를 열 때마다 라인이 자동으로 실행됩니다.

SQLite의 쿼리에서 Regex 사용

이제 SQLite에서 regex를 사용하려면 먼저 함수를 만들어야 한다는 것을 알았으니 간단한 함수를 만들어 봅시다. 함수의 이름이 'regexp'여야 한다는 점에 유의하는 것이 중요합니다. 이렇게 하면 regex 함수가 사용할 함수를 식별하는 데 도움이 됩니다.

내용을 변경하거나 덮어쓰고 새 함수를 생성하여 언제든지 함수를 변경할 수 있습니다. 다음은 예입니다.

sqlite_create_function ( 'regexp', 0, sub {return time} );

이 함수는 현재 시간을 반환합니다. 이를 테이블에 추가하려면 간단한 코드 줄을 사용하여 삽입할 수 있습니다.

INSERT INTO table_name (regexp());

이제 함수가 생성되었으므로 regex 쿼리를 사용할 준비가 되었습니다. 올바르게 사용하려면 다음을 기억하십시오. 끝에 'P'를 추가해야 합니다.

따라서 표현식에는 WHERE x REGEXP <regex>와 같은 내용이 포함됩니다.

위에서 만든 함수로 연산자를 사용해 봅시다. 아래 코드를 사용하여 올바르게 실행하십시오.

SELECT * from table_name
WHERE column_name REGEXP '\bA\w+'

이 코드에서는 문자 'A'로 시작하는 단어가 있는 테이블의 모든 콘텐츠를 볼 수 있습니다.

다음은 'A'로 시작하는 값을 표시하는 또 다른 예이지만 이번에는 대소문자를 구분합니다.

SELECT * from table_name
WHERE column_name REGEXP '(?i:\bA\w+)'

참고: 함수 생성 구문은 사용 중인 언어에 따라 변경될 수 있습니다.

SQLite의 명령줄에서 Regex 사용

명령줄에서 작업할 때 ~/.sqliter의 내용에 따라 regex 명령을 실행하기 위해 파일을 로드해야 할 수 있습니다. 대신 미리 함수를 생성했다면 항상 명령줄에서 직접 regex를 사용할 수 있습니다.

구문은 동일하게 유지되지만 -cmd 스위치를 사용하여 코드를 작성하기 전에 라이브러리를 로드해야 합니다. 다음은 SQLite 3에서 작동하는 예입니다.

sqlite3 "$file_name" -cmd
".load /usr/lib/sqlite3/pcre.so"
"SELECT fld FROM table_name
WHERE fld REGEXP '\b3\b';"

이렇게 하면 다른 SQLite 응용 프로그램을 열 필요 없이 시스템의 명령줄에서 직접 쿼리할 수 있습니다.

SQLite에서 Regex의 대안

다른 예를 들어 숫자 3이 포함된 테이블의 모든 값을 제공하는 쿼리를 생성한다고 가정해 보겠습니다. regex 연산자를 사용하여 이 작업을 수행하는 경우 다음과 같이 수행할 수 있습니다.

SELECT * FROM table_name
WHERE x REGEXP '(^|,)(3)(,|$)'

다른 방법은 다음과 같습니다.

SELECT fld FROM table_name
WHERE fld REGEXP '\b3\b';

두 경우 모두 적절한 함수가 실행 전에 이미 생성되었다고 가정합니다.

REGEX를 사용하지 않고 다르게 수행해야 한다고 가정합니다. 이 경우 아래와 같이 상대적으로 복잡한 쿼리를 항상 사용할 수 있습니다.

SELECT * FROM table_name
WHERE ',' || x || ',' LIKE '%,3,%'

두 방법 모두 잘 작동하지만 더 많은 논리 구축이 필요한 쿼리로 작업할 때는 종종 regex 연산자를 선택하는 것이 좋습니다.

많은 메모리를 차지하는 매우 길고 복잡한 쿼리로 끝날 수 있고 모든 경우에 문제를 해결하지 못할 수도 있기 때문입니다. regex 연산자는 모호성을 제거하고 해당 쿼리에 할당된 메모리를 줄입니다.

이것이 regex 연산자에 대해 알아야 할 모든 것입니다. 제공한 정보가 운영자를 쉽게 사용할 수 있도록 유용했기를 바랍니다.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub