该资料来自于Sql Server帮助文档,由于在我的一个小项目中用到CHARINDEX关键字,因此在此整理出来,与大家一起分享。
CHARINDEX 和 PATINDEX 函数都返回指定模式的开始位置。PATINDEX 可以使用通配符,而 CHARINDEX 不能。
这两个函数都带有两个参数:
• 希望获取其位置的模式。使用 PATINDEX,模式是可以包含通配符的文字字符串。使用 CHARINDEX,模式是不包含通配符的文字字符串。
• 字符串值表达式(通常为列名),SQL Server 2005 在其中搜索指定的模式。
例如,查找模式 arm
在 Document
表中 Title
列的某一行中的开始位置。
USE AdventureWorks; GO SELECT CHARINDEX('arm', Title) FROM Production.Document WHERE DocumentID = '1'; GO |
下面是结果集:
---------------- 7 (1 row(s) affected) |
如果未限制搜索的行,查询将返回表中的所有行,并对在其中查找到该模式的所有行报告非零值,对其他行报告零值。
下面的示例介绍了使用通配符查找模式 reflector
在 Document
表中 Title
列的任一行中的开始位置。
USE AdventureWorks; GO SELECT DocumentID, PATINDEX('%reflector%', Title)AS POSITION FROM Production.Document WHERE PATINDEX('%reflector%', Title) <> 0; GO |
下面是结果集:
DocumentID POSITION ---------- -------- 2 7 3 7 (2 row(s) affected) |
如果没有限制要搜索的行,查询将返回表中的所有行,对在其中找到该模式的所有行报告非零值。
*注意:CHARINDEX 不能与 text、ntext 和 image 数据类型一起使用。