PostgreSQL SUBSTRING() 函数与正则表达式示例

⚡ 智能摘要

PostgreSQL 子字符串示例tracts 并返回字符串的一部分,可以使用可选的起始位置和长度,它还可以将文本与 POSIX 正则表达式进行匹配,以提取数字或代码等模式。

  • 📋 语法: substring(string [from start] [for length]) 返回源字符串的一部分。
  • 1️⃣ 位置: 字符位置从 1 开始,省略长度则读取到字符串末尾。
  • 🔎 正则表达式: SUBSTRING(string FROM pattern) 例如trac这是第一个与 POSIX 正则表达式匹配的文本。
  • 🧮 的Grouping: 模式中带括号的部分只返回匹配项中捕获到的部分。
  • 🖥️ pgAdmin: 在 pgAdmin 查询编辑器中,每个子字符串查询的运行方式都相同。
  • 🤖 人工智能帮助: AI助手生成并解释正则表达式模式,以实现精确的子字符串提取。trac化。

PostgreSQL 使用正则表达式的子字符串函数

什么是 PostgreSQL 子串?

此 PostgreSQL 子字符串函数可以帮助你……tract 并返回字符串的一部分。它不返回整个字符串,而只返回其中的一部分,这对于修剪代码和读取固定宽度字段非常有用。

句法

此 PostgreSQL substring 函数采用以下语法:

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

参数

substring 函数使用以下参数:

绳子 源字符串,其数据类型为varchar、char、string等。
起始位置 一个可选参数。它表示 ex 的位置。trac字符串的开头部分将开始。如果省略此参数,则示例将开始。traction 从位置 1 开始,也就是字符串中的第一个字符。
长度 一个可选参数。它表示要省略的字符数。trac从字符串中提取 ted。如果省略此参数,函数 extrac从起始位置到字符串末尾的 ts。

例子

在这个例子中,我们想要……tract 单词的前 4 个字符 Guru99年:

SELECT substring('Guru99' for 4);

该命令将返回以下内容:

PostgreSQL 子串

我们没有指定起始位置,所以……trac子字符串从位置 1 开始。提取了四个字符。tracted 返回上述结果。

以下示例显示如何指定起始位置:

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

该命令将返回以下内容:

PostgreSQL 子串

我们明确指出,前任trac子字符串的起始位置应从第 1 个字符开始,并且应包含 4 个字符。trac特德。

让我们举例trac字符串中的 t 99 Guru99年:

SELECT substring('Guru99' from 5);

该命令将返回以下内容:

PostgreSQL 子串

我们将起始位置指定为 5。由于要显示的字符数为 5,因此trac特德没有具体说明,前任traction 一直延伸到字符串的末尾。

这是另一个示例:

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

该命令将返回以下内容:

PostgreSQL 子串

我们开始了前trac位置 5 处有 tion,并且有 2 个字符是 extrac特德。

考虑下面给出的 Book 表:

PostgreSQL 子字符串书表

我们想大致了解每本书的名称。我们可以举例说明。trac仅取表中名称列的前 15 个字符:

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

该命令将返回以下内容:

PostgreSQL 子字符串结果

现在我们对每本书的名字有一个大致的了解了。

使用 SQL 正则表达式匹配子字符串

In PostgreSQL你可以举例trac提取与指定的 POSIX 正则表达式匹配的子字符串。在这种情况下,substring 函数使用以下语法:

SUBSTRING(string FROM matching_pattern)

or

SUBSTRING(string, matching_pattern);

以下是对上述参数的解释。该字符串是源字符串,其 数据类型 可以是 varchar、char、string 等类型。matching_pattern 是用于在字符串中搜索的模式。

例子

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

该命令将返回以下内容:

使用 SQL 正则表达式匹配子字符串

我们的输入字符串是“Your age is 22”。在模式中,我们搜索数字模式;当找到该模式时,子字符串函数会执行相应的操作。trac只有两个字符。

如何使用 pgAdmin 匹配子字符串

现在让我们看看如何使用 pgAdmin 执行这些操作。不需要数据库的查询可以直接在查询编辑器窗口中执行。只需执行以下操作:

步骤1) 登录您的 pgAdmin 帐户。

步骤2) 在 pgAdmin 中,单击查询工具图标。

使用 pgAdmin 匹配子字符串

查询编辑器窗口将会打开。

步骤3) 在编辑器窗口中输入以下查询。

SELECT substring('Guru99' for 4);

步骤4) 单击执行图标来执行查询。

使用 pgAdmin 匹配子字符串

步骤5) 查询执行完毕。它应该返回以下内容:

使用 pgAdmin 匹配子字符串

例如2:

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

它应该返回以下内容:

使用 pgAdmin 匹配子字符串

下一个例子如下:

SELECT substring('Guru99' from 5);

它应该返回以下内容:

使用 pgAdmin 匹配子字符串

例如3:

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

它应该返回以下内容:

使用 pgAdmin 匹配子字符串

现在,让我们使用 Demo 数据库的 Book 表运行示例:

步骤1) 登录您的 pgAdmin 帐户。

步骤2) 从左侧导航栏中,单击“数据库”,然后单击“演示”。

使用 pgAdmin 匹配子字符串

步骤3) 在查询编辑器中输入查询:

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

步骤4) 单击执行按钮。

使用 pgAdmin 匹配子字符串

它应该返回以下内容:

PostgreSQL 子字符串结果

现在我们对每本书的名字有一个基本的了解。

使用 SQL 正则表达式匹配子字符串

要在 pgAdmin 上完成相同操作,请执行以下操作:

步骤1) 登录您的 pgAdmin 帐户。

步骤2) 单击查询工具图标。

使用 SQL 正则表达式匹配子字符串

查询编辑器窗口将会打开。

步骤3) 在编辑器窗口中输入以下查询。

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

步骤4) 单击执行图标来执行查询。

使用 SQL 正则表达式匹配子字符串

它应该返回以下内容:

使用 SQL 正则表达式匹配子字符串

下载本教程使用的数据库

常见问题

SUBSTR 是 SUBSTRING 的简化别名,它返回字符串的一部分。SUBSTRING 还支持 SQL 标准的 FROM 和 FOR 关键字以及 POSIX 正则表达式,而 SUBSTR 只接受以逗号分隔的位置和长度参数。

PostgreSQL SUBSTRING 函数从 1 开始计数,因此第一个字符位于位置 1,而不是 0。传递起始位置 1 将返回从第一个字符开始的字符串。

当 POSIX 模式未匹配任何内容时,SUBSTRING 函数返回 NULL 而不是空字符串。使用 IS NULL 函数检查结果可以帮助您处理预期模式不存在的行。

使用正则表达式捕获字符后面的内容。例如,`SUBSTRING(email FROM '@(.*)')` 会返回 `@` 符号之后的所有内容,从而提取每个电子邮件地址的域名部分。

当您只需要第一个匹配项作为简单值时,请使用 SUBSTRING 函数。如果您希望返回所有匹配项或多个捕获组(以数组形式),请选择 regexp_matches() 函数,因为 SUBSTRING 函数只返回第一个匹配项。

GitHub Copilot 等 AI 助手可以将纯英文描述转换为 POSIX 模式,解释每个标记匹配的内容,并提供测试字符串建议,从而减少构建子字符串示例时的反复试错。trac查询。

是的。描述您想要提取的文本部分,AI 助手会根据正确的位置或正则表达式生成一个 SUBSTRING 调用,您可以在 pgAdmin 中运行并对其进行优化。

是的,POSIX SUBSTRING 函数默认区分大小写。要忽略大小写进行匹配,需要将两个输入都转换为小写,例如 SUBSTRING(lower(name) FROM lower(pattern)),这样大写和小写字母就会被同等对待。

总结一下这篇文章: