当然!这里是 SQL 中 PATINDEX 函数的详细用法讲解,包含基本语法、参数说明和示例,非常适合初学者或复习参考:


📌 什么是 PATINDEX?

在 SQL Server 中,PATINDEX 用来 返回某个模式(pattern)首次出现在字符串中的起始位置
它类似 CHARINDEX,但 PATINDEX 支持通配符模式(如 %),因此功能更灵活。


🔹 基本语法

PATINDEX ( '%pattern%', expression )

🔹 参数说明

  • %pattern%
    • 模式字符串,必须用百分号 % 作为通配符;例如 %abc% 表示任意位置匹配包含 abc 的字符串。
    • 可以在模式中使用下划线 _(匹配单个字符)、方括号 [](匹配范围内任一字符)。
  • expression
    • 要搜索的字符串表达式,可以是列、变量或常量。

🔹 返回值

  • 返回整数,表示模式首次匹配到的位置(以 1 开始计数)。
  • 若未找到匹配,返回 0

✅ 使用示例

1⃣ 基本示例

SELECT PATINDEX('%lo%', 'Hello World') AS Position;

🔹 结果:

Position
--------
4

(因为“lo”第一次出现的位置是第 4 个字符。)


2⃣ 查找包含子串的列值

假设有表 Products

ProductName
Red Apple Juice
Green Tea
Blueberry Smoothie

你想找出每行是否包含 “ee”:

SELECT ProductName, PATINDEX('%ee%', ProductName) AS Position
FROM Products;

结果:

ProductNamePosition
Red Apple Juice0
Green Tea4
Blueberry Smoothie2

3⃣ 配合 CASE 进行判断

筛选出包含关键字“berry”的行:

SELECT ProductName
FROM Products
WHERE PATINDEX('%berry%', ProductName) > 0;

结果会返回:

Blueberry Smoothie

4⃣ 使用字符范围匹配

例如找到第一个大写字母出现的位置:

SELECT PATINDEX('%[A-Z]%', 'helloWorld') AS Position;

结果:

Position
--------
6

(第 6 个字符是大写字母 W。)


📝 小结

✅ PATINDEX 比 CHARINDEX 功能更强大,因为它支持通配符;
✅ 通配符 % 表示任意长度字符串,_ 表示任意单个字符;
✅ 返回位置基于 1,如果未匹配返回 0。


🔗 官方文档参考:PATINDEX (Transact-SQL)