当然!这里是 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;
结果:
ProductName | Position |
---|---|
Red Apple Juice | 0 |
Green Tea | 4 |
Blueberry Smoothie | 2 |
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)
发表回复