2010-09-23 31 views
2

我的表中有一列TEXT數據類型。現在,我需要在該TEXT字段中查找字符串的出現次數。 我已經在該表上創建了全文索引。但我不知道如何繼續下去。 我已經找到了爲VARCHAR計算字符串出現次數的方法。但是它們不能按原樣應用於TEXT字段。有什麼建議麼?如何計算SQL Server 2005中TEXT數據類型內字符串的出現

回答

7

試試這個:

declare @searchString varchar(max); 
set @searchString = 'something'; 
declare @textTable table (txt text); 
insert into @textTable (txt) 
values ('something that has something 2 times') 

select 
(
    datalength(txt) - 
    datalength(replace(cast(txt as varchar(max)), @searchString, '')) 
) 
/datalength(@searchString) [Count] 

    from @textTable as tt 

注意,鑄塑varchar(max)不會截斷你的text列varchar(max)的最大長度是2^31-1字節或2Gb。

+0

+1,漂亮的工作示例 – 2010-09-23 12:24:46

+0

看起來像它的工作正常。謝謝 – Anurag 2010-09-23 12:33:37

0

轉換是(文本)字段爲varchar,找到數

如:convert(varchar(200),textColumn)

+0

爲VARCHAR的大小限制是8000存儲每一行​​中的數據是超過那。 – Anurag 2010-09-23 12:09:54

+0

varchar(MAX)你可以試試.. – anishMarokey 2010-09-23 13:01:58

0

請注意,如果您使用ntext而不是文字,Denis Valeevs的答案不會給您正確的答案。

文本:最大長度爲2,147,483,647個字符的可變長度非Unicode數據。

nText:最大長度爲1,073,741,823個字符的可變長度的殺人數據。

0

這裏是如何做到這一點對一個NTEXT:

CREATE FUNCTION fn_CountInNText 
    (
     @SearchString nvarchar, 
     @NTextToSearch ntext 
    ) 
    RETURNS int 
    AS 
    BEGIN 
     RETURN 
     (
     datalength(@NTextToSearch) - 
     datalength(replace(cast(@NTextToSearch as nvarchar(max)), @SearchString, '')) 
     ) 
     /datalength(@SearchString)/2 
    END 
    GO 

然後選擇它是這樣的:

SELECT dbo.fn_CountInNText('Something',[TheNTextColumn]) AS [Count] 
FROM [TheTable] 
相關問題