SQL PATINDEX 函数

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 Function 1

我们使用 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
PATINDEX Function 3