首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 【100分】如何统计一个词在记录中所有字段的出现次数,并按次数排序,效率高一点的
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • look4u
    • 等级:
    发表于:2008-04-30 11:02:50 楼主
    有点像词频统计,就是想统计某个词在记录中各个字段出现的次数,实在不行在特定的几个字段里出现次数也可以,比如content字段里内容是“汽车投诉的概率势必提高。加上目前,汽车三包规定尚未出台,处理起来缺了依据,就更加难上加难了”我现在要找出“汽车”出现的次数(2次),然后能够按照这个次数来排序,最好能效率高一些的,大概一个表里有上千条数据。谢谢大家,100如果不够,开贴再送!!!
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-04-30 11:03:541楼 得分:0
    写个函数.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-04-30 11:04:392楼 得分:0
    SQL code
    得到一个字符串在另一个字符串中出现的次数.sql if 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')
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bqb
    • 等级:
    发表于:2008-04-30 11:08:113楼 得分:0
    SQL code
    declare @content varchar(2000) set @content='汽车投诉的概率势必提高。加上目前,汽车三包规定尚未出台,处理起来缺了依据,就更加难上加难了' select len(@content)-len(replace(@content,'汽车',' ')) as 次数 /* 次数 ------ 2 */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-30 11:10:284楼 得分:0
    引用 3 楼 bqb 的回复:
    SQL codedeclare @content varchar(2000)
    set @content='汽车投诉的概率势必提高。加上目前,汽车三包规定尚未出台,处理起来缺了依据,就更加难上加难了'

    select  len(@content)-len(replace(@content,'汽车',' '))  as  次数


    /*
    次数
    ------
    2
    */


    SQL code
    select * from tab order by len(content)-len(replace(content,'汽车',' '))
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-04-30 11:10:305楼 得分:0
    按楼上的说法逐一调用函数,并把结果相加.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-04-30 11:11:436楼 得分:0
    引用 5 楼 dawugui 的回复:
    按楼上的说法逐一调用函数,并把结果相加.

    是按2楼.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-04-30 11:13:477楼 得分:0
    如果是3,4楼的,建议改为:

    SQL code
    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 行) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bqb
    • 等级:
    发表于:2008-04-30 11:16:328楼 得分:0
    SQL code
    declare @content varchar(2000),@keyword varchar(20) select @content='汽车投诉的概率势必提高。加上目前,汽车三包规定尚未出台,处理起来缺了依据,就更加难上加难了', @keyword='汽车' select len(@content)-len(replace(@content,@keyword,replicate('a',len(@keyword)-1))) as 次数 /* 次数 ------ 2 */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • look4u
    • 等级:
    发表于:2008-04-30 11:16:339楼 得分:0
    楼上的方法把“汽车”替换成空格然后长度再相减好像有点问题,这样不太准确吧
    liangCK 的方法我回去做个试验
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fuanwei
    • 等级:
    发表于:2008-04-30 11:17:1710楼 得分:0
    SQL code
    declare @content nvarchar(2000) set @content='汽车' select * from( select (len(列名)-len(replace(列名,@content,'')))/len(@content) as 次数 fromwhere ...) order by 次数 desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • look4u
    • 等级:
    发表于:2008-04-30 11:22:1011楼 得分:0
    哦,对,应该除以串的长度
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-30 14:39:5712楼 得分:0
    引用 2 楼 liangCK 的回复:
    SQL code得到一个字符串在另一个字符串中出现的次数.sqlifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[f_getcharcount]')andxtypein(N'FN', N'IF', N'TF'))dropfunction[dbo].[f_getcharcount]GO--得到一个字符串在另一个字符串中出现的次数createfunctionf_getcharcount(@strvarchar(8000),@chrvarchar(20)
    )returnsintasbegindeclare@reint,@iintselect@re=0,@i=charindex(@chr,@str)+1while@i>1select@re=@r…


    这个不错
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-30 21:10:0613楼 得分:0
    好像没那么简单,呵呵.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved