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 函数示例,我们将使用如下所示的数据。

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 示例 2
SQL Server CHARINDEX 函数还允许您在列值中的字符串中搜索子字符串。在此 SQL Server 示例中,我们将查找部门名称列中空格的索引位置。
SELECT [FirstName]
,[LastName]
,[DepartmentName]
,CHARINDEX(' ', [DepartmentName]) AS [Space Position]
FROM [Employe]
如果您观察到第二条记录,虽然它在多个位置都有空格,但它显示了值 4。这是因为 CHARINDEX 会显示第一个出现的位置,而不关心其他出现的位置。

如何使用 CHARINDEX 查找电子邮件 @ 位置?
在此示例中,我们将使用字符串 CHARINDEX 查找电子邮件地址列中存在的 @ 符号的索引位置。
SELECT [FirstName]
,[LastName]
,[DepartmentName]
,[Email]
,CHARINDEX('@', [Email]) AS [@ Position]
FROM [Employe]

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