得到一个字符串在另一个字符串中出现的次数.sqlif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_getcharcount]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_getcharcount]
GO--得到一个字符串在另一个字符串中出现的次数
create function f_getcharcount(
@str varchar(8000),
@chr varchar(20)
) returns int
as
begin
declare @re int,@i int
select @re=0,@i=charindex(@chr,@str)+1
while @i>1
select @re=@re+1
,@str=substring(@str,@i,8000)
,@i=charindex(@chr,@str)+1
return(@re)
end
go--调用示例
select dbo.f_getcharcount('aadddbbbbad','ad')

解决方案 »

  1.   

    declare @content varchar(2000)
    set @content='汽车投诉的概率势必提高。加上目前,汽车三包规定尚未出台,处理起来缺了依据,就更加难上加难了'select  len(@content)-len(replace(@content,'汽车',' '))  as  次数
    /*
    次数
    ------
    2
    */
      

  2.   


    select * from tab order by len(content)-len(replace(content,'汽车',' '))  
      

  3.   

    如果是3,4楼的,建议改为:declare @content varchar(2000)
    set @content='汽车投诉的概率势必提高。加上目前,汽车三包规定尚未出台,处理起来缺了依据,就更加难上加难了'select  (len(@content)-len(replace(@content,'汽车','')))/len('汽车')  as  次数
    /*
    次数          
    ----------- 
    2(所影响的行数为 1 行)
    */declare @find as varchar(10)
    set @find = '汽车'select  (len(@content)-len(replace(@content,@find,'')))/len(@find)  as  次数
    /*
    次数          
    ----------- 
    2(所影响的行数为 1 行)
    */
      

  4.   

    declare @content varchar(2000),@keyword varchar(20)
    select @content='汽车投诉的概率势必提高。加上目前,汽车三包规定尚未出台,处理起来缺了依据,就更加难上加难了',
    @keyword='汽车'
    select  len(@content)-len(replace(@content,@keyword,replicate('a',len(@keyword)-1)))  as  次数
    /*
    次数
    ------
    2
    */
      

  5.   

    楼上的方法把“汽车”替换成空格然后长度再相减好像有点问题,这样不太准确吧
     liangCK 的方法我回去做个试验
      

  6.   

    declare @content nvarchar(2000)
    set @content='汽车'
    select * from(
    select  (len(列名)-len(replace(列名,@content,'')))/len(@content) as  次数
    from 表
    where ...)
    order by 次数 desc