SQL Server CHARINDEX() 函数使用指南

CHARINDEX() 函数是 SQL Server 中的字符串函数之一,用于在一个字符串中查找另一个子字符串的位置。如果找到了子字符串,该函数将返回它在原始字符串中的起始位置;否则,返回 0。

语法

CHARINDEX( substring, string [, start_location ] )

其中:

  • substring:要查找的子字符串。
  • string:要在其中查找子字符串的原始字符串。
  • start_location(可选):指定开始查找的位置。默认为 1。

使用场景

CHARINDEX() 函数常用于处理字符串中的文本数据。例如,在一个字符串中查找特定的关键字、提取某一子字符串等。

示例

下面提供两个 CHARINDEX() 函数的示例:

示例 1

假设我们有一个存储了多个电子邮件地址的字符串,我们需要找出其中包含 “@gmail.com” 的电子邮件地址,并返回它的起始位置。

SELECT CHARINDEX('@gmail.com', '[email protected]; [email protected]; [email protected]')

输出:

8

在上述示例中,我们将 ‘@gmail.com’ 作为子字符串传递给 CHARINDEX() 函数,’[email protected]; [email protected]; [email protected]’ 是要在其中查找子字符串的原始字符串。该函数返回了子字符串在原始字符串中的起始位置,即第一个 ‘@’ 的位置(从 1 开始计数)。

示例 2

假设我们有一个包含一组文件名的字符串,每个文件名都以特定的前缀开头,我们需要提取其中的文件名。

DECLARE @str VARCHAR(100) = 'file1.txt, file2.pdf, file3.docx';
SELECT SUBSTRING(
    @str,
    CHARINDEX(' ', @str) + 1,
    CHARINDEX(',', @str, CHARINDEX(' ', @str)) - CHARINDEX(' ', @str) - 1
  ) AS FileName1,
  SUBSTRING(
    @str,
    CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) + 2,
    LEN(@str) - CHARINDEX(',', @str, CHARINDEX(',', @str) + 1) - 1
  ) AS FileName2;

输出:

FileName1 FileName2
file1.txt file3.docx

在上述示例中,我们首先使用 CHARINDEX() 函数找到第一个文件名的起始位置。该函数查找第一个空格的位置,并返回其位置加上 1(即第一个文件名的起始位置)。接着,我们使用 CHARINDEX() 函数找到第一个逗号的位置,它是第一个文件名的结尾位置。因此,我们可以使用 SUBSTRING() 函数提取第一个文件名。对于第二个文件名,我们需要找到第二个逗号的位置,并从它的下一个字符开始提取文件名。

结论

CHARINDEX() 函数是一个简单而实用的字符串函数,它可以帮助我们在一个字符串中查找另一个子字符串的位置。无论是在数据清洗还是数据提取方