PATINDEX和CHARINDEX之间的性能如何?

时间:2009-09-03 10:12:06

标签: tsql sql-server-2008

我一直在存储过程中使用CHARINDEX检查NVARCHAR(MAX)类型的变量,但今天我发现CHARINDEX有8,000字节的限制!

我发现这篇文章SQL CHARINDEX() Has Data Size Limitations

所以我将CHARINDEX替换为PATINDEX,但我不知道PATINDEXCHARINDEX之间的效果。

2 个答案:

答案 0 :(得分:2)

对于您要查找的字符串,

CHARINDEX的限制为8000。不是你要搜索的字符串。

除非您想要查找字符串>该文章可能是错误的。 8000/4000长度。但是,它也使用不推荐使用的text数据类型。这是2007年的日期,所以它使用的是SQL Server 2005或2000,但是SQL Server 2005 BOL根本没有提到8000,这不是我尝试过的。

从SQL Server 2008 BOL:

  

CHARINDEX(expression1,expression2 [   ,start_location])

     

expression1是一个字符表达式   包含要找到的序列。   expression1限制为8000   字符。

     

expression2是要搜索的字符表达式。

注意:PATINDEX未提及SQL 2008或2005的8000限制。

最后,我使用CHARINDEX,因为如果你不需要模式匹配它支持长字符串

,我认为直接搜索更直观

答案 1 :(得分:1)

如果数据类型为text或ntext,则CHARIndex对您要搜索的字符串具有8000字节(非字符)限制。如果数据类型为varchar(max)或nvarchar(max),则8000字节限制无效;它搜索整个字符串。 (我只是在这一点。)我只是使用CAST解决了这个问题:CHARINDEX(searchterm, CAST(columnname as nvarchar(max))