日期:2014-05-18  浏览次数:20468 次

如何让出现的字符次数的多少来排序?感觉有点"变态"
比如有一表tb,数据如下

id text
1 我是中国人
2 大家好,我是中人中人是
3 你们好吗?我是我是
4 大家来帮个忙,我不是中国的.我是外国的是

如果我搜索"是人",那么首先是按"是"字出现的次数多少,多的排前面.出现"是"字数相同的,再按"人"字出现的次数多少排序.
所以得出的结果是:

4 大家来帮个忙,我不是中国的.我是外国的是
2 大家好,我是中人中人是
3 你们好吗?我是我是
1 我是中国人

这样如何写sql语句?谢谢!

------解决方案--------------------
SQL code
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([id] int,[text] varchar(38))
insert [tb]
select 1,'我是中国人' union all
select 2,'大家好,我是中人中人是' union all
select 3,'你们好吗?我是我是' union all
select 4,'大家来帮个忙,我不是中国的.我是外国的是'
go

select * from tb
order by
  len([text])-len(replace([text],'是','')) desc,
  len([text])-len(replace([text],'人','')) desc

/**
id          text
----------- --------------------------------------
4           大家来帮个忙,我不是中国的.我是外国的是
2           大家好,我是中人中人是
3           你们好吗?我是我是
1           我是中国人

(4 行受影响)
**/