PostgreSQL SUBSTRING() Function with Regex Example

⚡ Smart Summary

PostgreSQL SUBSTRING extracts and returns part of a string, using an optional starting position and length, and it also matches text against a POSIX regular expression to pull out patterns such as numbers or codes.

  • 📋 Syntax: substring( string [from start] [for length] ) returns a portion of the source string.
  • 1️⃣ Positions: Character positions begin at 1, and omitting the length reads to the string end.
  • 🔎 Regex: SUBSTRING(string FROM pattern) extracts the first text matching a POSIX regular expression.
  • 🧮 Grouping: A parenthesized group in the pattern returns only that captured part of the match.
  • 🖥️ pgAdmin: Every substring query runs the same way inside the pgAdmin query editor.
  • 🤖 AI Help: AI assistants generate and explain regex patterns for accurate substring extraction.

PostgreSQL SUBSTRING Function with Regex

What is PostgreSQL Substring?

The PostgreSQL substring function helps you to extract and return part of a string. Instead of returning the whole string, it only returns a part of it, which is useful for trimming codes and reading fixed-width fields.

Syntax

The PostgreSQL substring function takes the following syntax:

substring( string [from starting_position] [for length] )

Parameters

The following parameters are used with the substring function:

string The source string whose data type is varchar, char, string, etc.
starting_position An optional parameter. It denotes the place where the extraction of the string will begin. If you omit this parameter, the extraction starts from position 1, which is the first character in the string.
length An optional parameter. It denotes the number of characters to be extracted from the string. If you omit this parameter, the function extracts from starting_position to the end of the string.

Examples

In this example, we want to extract the first 4 characters from the word Guru99:

SELECT substring('Guru99' for 4);

The command will return the following:

PostgreSQL Substring

We did not specify the starting position, so the extraction of the substring started at position 1. Four characters were extracted to return the result above.

The following example shows how to specify the starting position:

SELECT substring('Guru99' from 1 for 4);

The command will return the following:

PostgreSQL Substring

We specified that the extraction of the substring should begin from position 1, and 4 characters should be extracted.

Let us extract 99 from the string Guru99:

SELECT substring('Guru99' from 5);

The command will return the following:

PostgreSQL Substring

We specified the starting position as 5. Since the number of characters to be extracted was not specified, the extraction ran to the end of the string.

Here is another example:

SELECT substring('Guru99' from 5 for 2);

The command will return the following:

PostgreSQL Substring

We started extraction at position 5, and 2 characters were extracted.

Consider the Book table given below:

PostgreSQL Substring Book table

We want to get a rough idea about the name of each book. We can extract only the first 15 characters from the name column of the table:

SELECT
   id,
   SUBSTRING(name, 1, 15 ) AS name_initial
FROM
   Book
ORDER BY
   id;

The command will return the following:

PostgreSQL Substring result

We now have a rough idea about the name of every book.

Matching Substrings with SQL Regular Expression

In PostgreSQL, you can extract a substring that matches a specified POSIX regular expression. In this case, the substring function uses the following syntax:

SUBSTRING(string FROM matching_pattern)

or

SUBSTRING(string, matching_pattern);

Here is an explanation of the above parameters. The string is the source string, whose data type is varchar, char, string, and so on. The matching_pattern is the pattern used for searching in the string.

Examples

SELECT
   SUBSTRING (
      'Your age is 22',
      '([0-9]{1,2})'
   ) as age;

The command will return the following:

Matching Substrings with SQL Regular Expression

Our input string is Your age is 22. In the pattern, we search for a numeric pattern; when it is found, the substring function extracts only two characters.

How to Match Substrings Using pgAdmin

Now let us see how these actions are performed using pgAdmin. The queries that do not need a database can be executed directly from the query editor window. Just do the following:

Step 1) Login to your pgAdmin account.

Step 2) On pgAdmin, click the Query Tool icon.

Matching Substrings Using pgAdmin

The query editor window will be opened.

Step 3) Type the following query in the editor window.

SELECT substring('Guru99' for 4);

Step 4) Click the Execute icon to execute the query.

Matching Substrings Using pgAdmin

Step 5) Query execution is done. It should return the following:

Matching Substrings Using pgAdmin

Example 2:

SELECT substring('Guru99' from 1 for 4);

It should return the following:

Matching Substrings Using pgAdmin

Here is the next example:

SELECT substring('Guru99' from 5);

It should return the following:

Matching Substrings Using pgAdmin

Example 3:

SELECT substring('Guru99' from 5 for 2);

It should return the following:

Matching Substrings Using pgAdmin

Now, let us run the example using the Book table of the Demo database:

Step 1) Login to your pgAdmin account.

Step 2) From the navigation bar on the left, click Databases, then click Demo.

Matching Substrings Using pgAdmin

Step 3) Type the query in the query editor:

SELECT
   id,
   SUBSTRING(name, 1, 15 ) AS name_initial
FROM
   Book
ORDER BY
   id;

Step 4) Click the Execute button.

Matching Substrings Using pgAdmin

It should return the following:

PostgreSQL Substring result

We now have a basic idea of the name of every book.

Matching Substrings with SQL Regular Expression

To accomplish the same on pgAdmin, do the following:

Step 1) Login to your pgAdmin account.

Step 2) Click the Query Tool icon.

Matching Substrings with SQL Regular Expression

The query editor window will be opened.

Step 3) Type the following query in the editor window.

SELECT
   SUBSTRING (
      'Your age is 22',
      '([0-9]{1,2})'
   ) as age;

Step 4) Click the Execute icon to execute the query.

Matching Substrings with SQL Regular Expression

It should return the following:

Matching Substrings with SQL Regular Expression

Download the Database used in this Tutorial

FAQs

SUBSTR is a shorter alias of SUBSTRING and returns part of a string. SUBSTRING also supports the SQL-standard FROM and FOR keywords plus POSIX regular expressions, while SUBSTR only accepts comma-separated position and length arguments.

PostgreSQL SUBSTRING is one-based, so the first character sits at position 1, not 0. Passing a starting position of 1 returns the string from its first character onward.

When the POSIX pattern matches nothing, SUBSTRING returns NULL rather than an empty string. Testing the result with IS NULL lets you handle rows where the expected pattern is absent.

Use a regular expression that captures what follows the character. For example, SUBSTRING(email FROM ‘@(.*)’) returns everything after the @ sign, giving you the domain part of each email address.

Use SUBSTRING when you need the first matching text as a simple value. Choose regexp_matches() when you want every match or multiple capture groups returned as an array, since SUBSTRING returns only the first match.

AI assistants such as GitHub Copilot turn a plain-English description into a POSIX pattern, explain what each token matches, and suggest test strings, which reduces trial-and-error when building substring extraction queries.

Yes. Describe the part of the text you want, and the AI assistant drafts a SUBSTRING call with the correct positions or regular expression, which you can run and refine inside pgAdmin.

Yes, POSIX SUBSTRING matching is case-sensitive by default. To match regardless of case, lower both inputs, for example SUBSTRING(lower(name) FROM lower(pattern)), so uppercase and lowercase letters are treated the same.

Summarize this post with: