2009-09-03 94 views

回答

2

CHARINDEX對於您要查找的字符串限制爲8000。不是你正在搜索的字符串。

該文章可能是錯誤的,除非你想查找> 8000/4000長度的字符串。但是,它也使用不贊成使用的文本數據類型。它的日期是2007年,所以它使用的是SQL Server 2005或2000,但SQL Server 2005 BOL根本沒有提及8000,這不是我嘗試過的。

從SQL Server 2008 BOL:

CHARINDEX(表達式1,表達式2 [ ,START_LOCATION])

表達式是一個字符表達式 包含要找到的序列。 expression1限制爲8000 個字符。

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

注:PATINDEX沒有提到8000極限SQL 2008或2005

最後,我會使用CHARINDEX,因爲我認爲這是簡單的搜索更直觀,如果你不需要模式匹配它支持長字符串

+0

感謝您的回覆,我需要處理一個很長的字符串(可能超過8000),因此只能選擇PATINDEX。 – 2009-09-03 13:39:29

+2

這並不能說明哪個函數更快...... – gotqn 2013-07-24 09:45:31

+0

@gotqn:你無法真正比​​較執行不同事情和行爲不同的函數。說,PATINDEX是模式匹配,其中CHARINDEX是平等的。它比較'LIKE'和'=' – gbn 2013-07-25 06:39:31

1

如果數據類型是text或ntext,CHARIndex對您要搜索的字符串有8000字節(非字符)限制。如果數據類型爲varchar(max)或nvarchar(max),則8000字節的限制不生效;它搜索整個字符串。 (我只是有點這樣。)我解決了這個剛剛使用CAST:CHARINDEX(searchterm, CAST(columnname as nvarchar(max))