Regex Operator in SQLite

Bilal Shahid Oct 25, 2022
  1. What Is Regex
  2. How to Install Regex in SQLite
  3. Use Regex in a Query in SQLite
  4. Use Regex From the Command Line in SQLite
  5. Alternatives to Regex in SQLite
Regex Operator in SQLite

Using functions makes SQLite much easier, and data processing tends to be much quicker. An extension to this is the regex operator, frequently used to provide a better user experience by shortening queries and allowing users to process data faster.

What Is Regex

Regex is the clause used when a user wants to refer to a regular expression. Its main purpose is to call a user-defined function which is then loaded into the database and performs some additional tasks that may have been added after the regex clause.

The function can perform any activity that the user requires. However, it is important to note that the function needs to be defined and loaded before regex is used.

If this is not done beforehand, using the regex clause will result in an error message. This is because there is no function that it is linked to by default.

Therefore, to use it effectively, you need to create your function in the application and then provide the callback link to the SQLite driver.

How to Install Regex in SQLite

In most cases, regex in SQLite comes with the package. It is available in some SQLite distributions or GUI tools but not in all cases.

So, there is a high chance that you might have to install it. Here is a step-by-step tutorial on how you can do so.

  1. Write the following code in your terminal.

    sudo apt-get install sqlite3-pcre
    
  2. Now, Perl regular expressions have been installed in a loadable file. You will find it in /usr/lib/sqlite3/pcre.so.

  3. To use it, you need to load it by using this:

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

Now, you can easily use the regex clause in SQLite. It is important to note that you must load the file each time to use it properly.

A way around it is to add the line into your ~/.sqliterc. This way, the line will run automatically every time you open SQLite.

Use Regex in a Query in SQLite

Now that you know that you must first create a function to use regex in SQLite let’s make a simple function. It is important to note that the function’s name needs to be 'regexp' This will help the regex function identify the function to be used.

You can always change the function by altering its contents or overwriting it and creating a new function. Here is an example:

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

This function returns the current time. To add this to a table, you can insert it using a simple line of code.

INSERT INTO table_name (regexp());

Now that your function has been created, you are ready to use the regex query. Remember that to use it correctly; a 'P' must be added at the end.

So, your expression will include something like WHERE x REGEXP <regex>.

Let’s use the operator with the function created above. Use the code below to execute it correctly.

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

In this code, you can view all the content in the table where the words begin with the letter 'A'.

Here’s another example that would display the values starting with 'A', but this time, it is case-sensitive.

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

Note: The syntax for creating the function might change depending on the language you’re using.

Use Regex From the Command Line in SQLite

When working in a command line, you might have to load a file to execute the regex command depending on the contents of your ~/.sqliterc. Instead, you can always use regex directly from your command line as long as you have already created a function beforehand.

The syntax remains the same, but you must load the library before writing the code using the -cmd switch. Here is an example that will work with SQLite 3.

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

This way, you can query directly from the command line on your system without needing to open another SQLite application.

Alternatives to Regex in SQLite

Let’s take a different example and assume that you want to create a query that provides all the values in the table that contain the number three. If you were doing this using the regex operator, you could do so as follows:

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

Here is another method:

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

In both cases, we assume that an appropriate function has already been created before execution.

Suppose we had to do this differently without using REGEX. In that case, we could always use a relatively complicated query like the one below.

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

Although both methods will work fine, opting for the regex operator is often recommended while working with queries requiring more logic building.

This is because you might end up with a very long and complicated query that takes up a lot of memory and might not even solve the problem in all cases. The regex operator removes the ambiguity and reduces the memory allocated to that query.

That was everything that you need to know about the regex operator. We hope that the information we provided proved useful so that you can easily use the operator.

Author: 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