SQL Server 的 PATINDEX 函数用于返回指定表达式中模式首次出现时的起始索引位置。如果找不到指定的字符串,则返回零。PATINDEX 函数的索引位置从 1 开始,而不是 0。其语法为:
SELECT PATINDEX (%pattern%, ExpressionToSearch) FROM [Source]
PATINDEX 函数从原始字符串中搜索特定模式的索引位置。如果 pattern 或 ExpressionToSearch 为 NULL,则返回 NULL。
SQL Server PATINDEX 函数示例
我们将展示使用此函数的多种方法。
DECLARE @str1 VARCHAR(50), @str2 VARCHAR(50)
SET @str1 = 'Tutorials On SQL Server 2014'
SET @str2 = 'We are xyz working at xyz Corporation'
SELECT PATINDEX('%a%', @str1) AS Result1
-- Finding the Index position
SELECT PATINDEX('%sql%', @str1) AS Result2
SELECT PATINDEX('%language%', @str1) AS Result3
-- Finding the Index position of First Occurred xyz
SELECT PATINDEX('%xyz%', @str2) AS Result4
SELECT PATINDEX('%a_%', @str2) AS Result5

我们使用 PATINDEX 函数查找变量 @str1 中“a”的索引位置。
SELECT PATINDEX('%a%', @str1) AS Result1
接下来,我们查找 xyz 的索引位置。
SELECT PATINDEX('%xyz%', @str2) AS Result4
尽管 xyz 出现在多个位置,但它返回了 8。这是因为 PATINDEX 只返回第一个出现的索引位置,而忽略其他。下一行,我们搜索了 @str1 变量中不存在的 language。这就是为什么这个 字符串函数 返回 0。
SELECT PATINDEX('%language%', @str1) AS Result3
SQL PATINDEX 函数示例 2
它还允许您搜索列值中的模式。在此 SQL Server 示例中,我们在 [English Description] 列中查找 light 的索引位置。在此示例中,我们使用 Adventure Works DW 2014 数据库中的 DimProduct 表数据。
SELECT [ProductKey]
,[EnglishProductName]
,[StandardCost]
,[Color]
,[DealerPrice]
,[EnglishDescription]
,PATINDEX('%light%', [EnglishDescription]) AS indexval
,[StartDate]
,[EndDate]
FROM [AdventureWorksDW2014].[dbo].[DimProduct]
WHERE [EnglishDescription] IS NOT NULL AND [EndDate] IS NOT NULL
