SQL Server Substring()函数

在本教程中,将学习如何使用SQL Server SUBSTRING()函数从字符串中提取子字符串。

SQL Server SUBSTRING()函数简介

SUBSTRING()从输入字符串中的位置开始提取具有指定长度的子字符串。

以下是SUBSTRING()函数的语法:

SUBSTRING(input_string, start, length);

在这个语法中:

  • input_string可以是字符,二进制,文本,ntext或图像表达式。
  • start是一个整数,指定返回的子字符串的起始位置。 请注意,input_string中的第一个字符是1,而不是0
  • length是一个正整数,指定要返回的子字符串的字符数。 如果长度为负,则SUBSTRING()函数会引发错误。 如果start + length> input_string的长度,子字符串将从开始处开始并包含input_string的其余字符。

SQL Server SUBSTRING()示例

下面举一些使用SUBSTRING()函数来了解它如何工作的例子。

1. SUBSTRING()函数使用带文字字符串

此示例在"SQL Server SUBSTRING"字符串中从第五个字符开始提取长度为6的子字符串。

SELECT 
    SUBSTRING('SQL Server SUBSTRING', 5, 6) result;

执行上面查询语句,得到以下结果:

result
------
Server

(1 row affected)

2. 将SUBSTRING()函数与表列一起使用

下面将使用示例数据库中的sales.customers表进行演示。

客户表结构

此示例使用SUBSTRING()函数从客户的电子邮件地址中提取域:

SELECT 
    email, 
    SUBSTRING(
        email, 
        CHARINDEX('@', email)+1, 
        LEN(email)-CHARINDEX('@', email)
    ) domain
FROM 
    sales.customers
ORDER BY 
    email;

执行上面查询语句,得到以下结果:

查询结果

上面语句如怎么运行?

首先,使用CHARINDEX()函数在电子邮件中搜索"@"字符。 域名将从"@"字符加1开始。

然后,使用CHARINDEX()函数的结果来确定:

  • 域名的起始位置:CHARINDEX('@', email) + 1
  • 域名的长度:LEN(email)-CHARINDEX('@', email)

要计算每个域的电子邮件数,可以使用以下查询:

SELECT 
    SUBSTRING(
        email, 
        CHARINDEX('@', email)+1, 
        LEN(email)-CHARINDEX('@', email)
    ) domain,
    COUNT(email) domain_count
FROM 
    sales.customers
GROUP BY
    SUBSTRING(
            email, 
            CHARINDEX('@', email)+1, 
            LEN(email)-CHARINDEX('@', email)
        );

执行上面查询语句,得到以下结果:

在本教程中,学习了如何使用SQL Server SUBSTRING()函数从字符串中提取字符。


上一篇: SQL Server字符串函数 下一篇: SQL Server Window函数