SQL Server Substring

17 Mar 2025 | 6 分钟阅读

SUBSTRING 是 SQL Server 中的一个内置函数,它允许我们根据需要从任何给定的字符串集中提取特定的子字符串。数据库开发人员在查询中广泛使用此函数来从输入字符串中提取任意数量的子字符串。Substring 从指定位置开始,从输入字符串中提取指定长度的字符串。此函数的主要目的是返回字符串的特定部分。

Substring 的语法

以下是在 SQL Server 中 substring 函数的基本语法

参数

此函数的参数说明在此

  • Expression: 这是我们将从中提取所需字符串部分(子字符串)的输入字符串。它可以是任何字符、文本、ntext、binary 或 image 类型。
  • Position: 这是一个整数值,用于确定从给定表达式中提取特定字符串部分的起始位置。表达式的第一个位置始终是 1,而不是 0。它还支持负整数值作为起始位置。
  • Length: 这是一个正整数值,用于指定可以从给定表达式中检索多少个字符。如果长度为负数,则会返回错误。如果 start + length 大于输入字符串的长度,则子字符串将从开头开始,并以输入字符串的剩余字符结束。

返回类型

如果输入表达式是受支持的字符数据类型之一,则返回字符数据。如果它是二进制数据类型,则此函数返回二进制数据。除了下表中提到的例外情况,我们将获得与指定表达式相同类型的提取的子字符串。

输入表达式返回值
char/varchar/textvarchar
nchar/nvarchar/ntextnvarchar
binary/varbinary/imagevarbinary

注意事项

使用 substring 函数时必须考虑以下规则

  • substring 函数始终需要所有三个参数。
  • 如果起始位置大于输入字符串的最大字符数,则 substring 函数不返回任何内容。
  • 字符串的总长度可能大于输入字符串的最大字符长度。在这种情况下,生成的子字符串将是从表达式的起始位置到最后一个字母的整个字符串。

支持的版本

以下 SQL Server 版本可以使用 SUBSTRING 函数

  • SQL Server 2019、SQL Server 2018、SQL Server 2017、SQL Server 2016、SQL Server 2014、SQL Server 2012、SQL Server 2008 R2、SQL Server 2008、SQL Server 2005,
  • Azure SQL Database、Azure SQL Data Warehouse、Parallel Data Warehouse

示例

让我们通过各种示例来理解 SUBSTRING 函数在 SQL Server 中的工作原理

1. 带有字面字符串的 Substring 函数

以下语句从输入字符串的第五个字符开始,检索长度为 13 的字符串部分(子字符串)。

它将显示以下输出:

SQL Server Substring

以下语句检索整个字符串。这是因为当字符串的总长度大于输入字符串的最大字符长度时,生成的子字符串将是表达式的整个字符串。

它将显示以下输出:

SQL Server Substring

2. 表上的 Substring 函数

要理解 substring 函数在表上的用法,我们首先需要创建一个表。以下语句在选定的数据库中创建一个名为“persons”的表

接下来,我们将如下向此表中插入一些值

我们可以使用 SELECT 语句验证这些值:

它将显示以下输出:

SQL Server Substring

此语句在“persons”表中的 person_nameemail 列上使用 SQL Server substring 函数。姓名从第一个位置开始,返回四个字符。电子邮件从第五个位置开始,返回八个字符。

我们将得到下面的输出,其中我们可以看到 p_name 和 sub_mail 是子字符串列

SQL Server Substring

3. Substring 函数与 Charindex

如果我们要使用 substring 函数查找电子邮件列中存在的域名,我们可以执行以下语句

它将显示以下输出,其中我们可以看到 DomainName 是子字符串列,它返回 @ 符号之后的部分字符串:

SQL Server Substring

在上面的查询中,我们可以观察到以下函数

此函数查找每个记录中 @ 符号的索引位置,并将索引位置加一,因为域名从下一个位置开始,然后使用 LEN 函数查找电子邮件的长度。最后,substring 函数提取字符串的一部分,并在字符串结束时终止。

这是使用 charindex 的另一个 substring 示例,其中我们将查找电子邮件列中 @ 符号之前的字符串

它将显示以下输出,其中我们可以看到 EmailString 是子字符串电子邮件列,它返回 @ 符号之前的字符串部分

SQL Server Substring

4. WHERE 子句中的 Substring

SQL Server 中的 substring 函数也可以与 WHERE 子句一起使用。以下语句从 'persons' 表中提取所有州名以“a”结尾的记录

我们将得到以下输出,其中所有记录的州名都以 a 结尾

SQL Server Substring

5. Substring 与 LIKE 操作符

LIKE 操作符用于限制从表中返回所有记录。此操作符用于限制 substring 函数,该函数提取所有州名以 York 结尾的记录

我们将得到以下输出,其中所有记录的州名都以 York 结尾

SQL Server Substring

6. ORDER BY 子句中的 Substring

SQL Server 中的 substring 函数也可以与 ORDER BY 子句一起使用。我们在该子句中使用 substring 函数来使用子字符串结果集对记录进行排序。以下查询将使用 state 列的子字符串对数据进行排序

我们将得到以下输出,其中所有记录的州名都以 York 结尾

SQL Server Substring

7. Substring 负索引示例

我们也可以在 SQL Server substring 函数中使用负索引,但这可能没有意义。例如,我们取 substring 索引为 (-2, 3)。这意味着索引从位置 -2 开始,并从此返回 3 个字符。由于我们没有 -2 到 0 的记录(3 条记录),因此该函数将返回从 1 到 3 的字符。

执行该语句,我们将看到以下输出

SQL Server Substring