SQL CHARINDEX 函数

SQL CHARINDEX 函数是一个字符串方法,用于查找现有记录中给定表达式的索引位置。索引位置从 1 开始,而不是 0。

SQL CHARINDEX 函数语法

CHARINDEX 函数的语法是:

SELECT CHARINDEX(ExpressionToFind, ExpressionToSearch, Starting_Position)
FROM [Source]
  • ExpressionToFind:此 CHARINDEX 函数将搜索此表达式。如果找到该表达式,它将返回索引位置。否则,它将返回 0。
  • ExpressionToSearch:要在其上执行搜索操作的表达式。它将在 ExpressionToFind 中搜索此表达式。
  • Starting:这是一个可选参数。如果指定了起始位置,它将从此字符位置开始搜索。否则,它从开头开始搜索并返回其位置。

如果 ExpressionToFind 或 expressionToSearch 为 NULL,则返回 NULL。对于此 CHARINDEX 函数示例,我们将使用如下所示的数据。

Employe Source

SQL Server CHARINDEX 函数示例

下面的 CHARINDEX 函数查询从开始和指定位置查找现有和不存在项的索引位置。首先,我们从变量 @ExpressionToSearch 中查找“in”的位置。

在下一行中,我们使用了 CHARINDEX 函数的起始参数。这意味着字符串方法将从 20 开始搜索“in”,从而减少服务器的负载。查询执行将变得更快。

接下来,我们搜索了变量中不存在的以下单词。这就是为什么它返回 0。

DECLARE @ExpressionToSearch varchar(100)
SET @ExpressionToSearch = 'Learn SQL Server 2014 with Examples in Tutorial Gateway' 

--Searching for a existent word --37
SELECT CHARINDEX('in', @ExpressionToSearch) AS 'SQLCHARINDEX' 

--Searching from specific position – 20
SELECT CHARINDEX('in', @ExpressionToSearch, 20) AS 'SQLCHARINDEX' 

--Searching for a non-existent word –0
SELECT CHARINDEX('CHARINDEX', @ExpressionToSearch) AS 'SQLCHARINDEX'
CHARINDEX FUNCTION 1

CHARINDEX 示例 2

SQL Server CHARINDEX 函数还允许您在列值中的字符串中搜索子字符串。在此 SQL Server 示例中,我们将查找部门名称列中空格的索引位置。

SELECT [FirstName]
      ,[LastName]
      ,[DepartmentName]
      ,CHARINDEX(' ', [DepartmentName]) AS [Space Position]
 FROM [Employe]

如果您观察到第二条记录,虽然它在多个位置都有空格,但它显示了值 4。这是因为 CHARINDEX 会显示第一个出现的位置,而不关心其他出现的位置。

Finding the Empty Space in a Column 2

如何使用 CHARINDEX 查找电子邮件 @ 位置?

在此示例中,我们将使用字符串 CHARINDEX 查找电子邮件地址列中存在的 @ 符号的索引位置。

SELECT [FirstName]
      ,[LastName]
      ,[DepartmentName]
      ,[Email]
      ,CHARINDEX('@', [Email]) AS [@ Position]
 FROM [Employe]
SQL Server CHARINDEX FUNCTION to find @ position in Email 3

注意:我们不能在 Image、Text 和 NText 数据类型上使用此函数。