`
逆风的香1314
  • 浏览: 1416084 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分拆统计字符串

Go 
阅读更多

在数据库表tbl1中有一个字段Keywords,它是nvarchar类型,长度为1000,该字段的内容是所要分析的论文的关键字
id??????????????????????? keywords
-----------------------------------------------------------
1????????????????????????? kw1;kw2;kw3
2????????????????????????? kw2;kw3
3????????????????????????? kw3;kw1;kw4

问题1。
对于在keywords字段中出现的所有关键字集合(上例中关键字集合为{kw1,kw2,kw3,kw4})中的任意一个关键字,要统计它出现的次数(也就是包含该关键字的纪录的条数),然后写到另一张表中。最后的效果就是
keywords?????? count
-------------------------
kw1????????????? 2
kw2????????????? 2
kw3????????????? 3
kw4????????????? 1


问题2。
在此基础上,要进行组合查询。也就是说在整个关键字集合中任意抽出两个关键字,统计它们在数据库表纪录中同时出现的次数。对于上题,最后效果要是:
keywords???????????? count
----------------------------------
kw1;kw2??????????????? 1
kw1;kw3??????????????? 2
kw1;kw4??????????????? 1
kw2;kw3??????????????? 2
kw2;kw4??????????????? 0
kw3;kw4??????????????? 1

--------------------------------------------------------------------------------------

--统计示例

--为统计处理专门做的序数表
select top 1000 id=identity(int,1,1) into 序数表 from syscolumns a,syscolumns b
alter table 序数表 add constraint pk_id_序数表 primary key(id)
go

--示例数据
create table tbl1(id int,keywords nvarchar(1000))
insert tbl1 select 1,'kw1;kw2;kw3'
union? all? select 2,'kw2;kw3'
union? all? select 3,'kw3;kw1;kw4'
go

--第一种统计(计数)
select keyword=substring(a.keywords,b.id,charindex(';',a.keywords+';',b.id)-b.id)
?,[count]=count(distinct a.id)
from tbl1 a,序数表 b
where b.id<=len(a.keywords)
?and substring(';'+a.keywords,b.id,1)=';'
group by substring(a.keywords,b.id,charindex(';',a.keywords+';',b.id)-b.id)
go

--第二种统计(组合统计)
select keyword=substring(a.keywords,b.id,charindex(';',a.keywords+';',b.id)-b.id)
?,[count]=count(distinct a.id),a.id
into #t
from tbl1 a,序数表 b
where b.id<=len(a.keywords)
?and substring(';'+a.keywords,b.id,1)=';'
group by substring(a.keywords,b.id,charindex(';',a.keywords+';',b.id)-b.id),a.id

select keyword=a.keyword+';'+b.keyword,[count]=sum(case a.id when b.id then 1 else 0 end)
from #t a,#t b
where a.keywordgroup by a.keyword,b.keyword
order by keyword

drop table #t
go

--删除测试环境
drop table tbl1,序数表

/*--测试结果

--统计1
keyword??? count??
---------- --------
kw1??????? 2
kw2??????? 2
kw3??????? 3
kw4??????? 1

(所影响的行数为 4 行)


--统计2
keyword???????????????? count?????
----------------------- -----------
kw1;kw2???????????????? 1
kw1;kw3???????????????? 2
kw1;kw4???????????????? 1
kw2;kw3???????????????? 2
kw2;kw4???????????????? 0
kw3;kw4???????????????? 1

(所影响的行数为 6 行)
--*/

分享到:
评论

相关推荐

    vb字符串分隔与合并的程序实例

    要统计字符串中的字符数量,可以使用`Len()`函数。例如,如果你想要知道字符串`str`的长度: ```vb Dim strLength As Integer = Len(str) ``` `strLength`变量将存储`str`中的字符数。 3. **字符串合并**: ...

    linux 字符串操作

    此命令组合用于统计字符串中出现的指定字符 `g` 的次数。 2. **使用 `sed`:** ```bash $ echo -n $var | sed 's/[^g]//g' | wc -c 2 ``` 该命令用 `sed` 删除除了 `g` 之外的所有字符,然后使用 `wc -c` ...

    遍历字符串-返回数组

    在本篇文章中,我们将深入探讨如何通过编程方式遍历一个包含特定分隔符的字符串,并将其转换为数组的形式。这一过程在多种编程语言中都非常常见,尤其是在处理文本数据时。根据给定的信息(标题:“遍历字符串-返回...

    在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。(C语言)

    在C语言中,查找一个已知字符串中的最长单词是一项常见的编程任务,这涉及到字符串处理、指针操作以及循环控制等基础知识。在这个问题中,我们假设输入的字符串仅包含字母和空格,空格用于分隔不同的单词。接下来,...

    java统计字符串单词个数的方法解析

    因此,统计字符串中的单词个数主要涉及以下几个步骤: 1. **去除标点符号**:在统计前,我们需要将字符串中的标点符号替换为分隔符,这里选择逗号(,)作为分隔符。这是因为逗号不会出现在正常的英文单词中,便于...

    oracle将以逗号分隔字符串转多行

    通过这样的查询,可以方便地对逗号分隔的字符串进行分析和操作,比如统计、聚合或其他复杂的数据处理任务。这在处理大量数据,尤其是日志数据或配置文件等以逗号分隔的数据格式时非常有用。同时,这也展示了Oracle ...

    详解Python核心对象类型字符串

    最后,Python提供了丰富的字符串方法,如lower()、upper()、capitalize()、title()、count()、strip()等,它们用于执行各种常用的字符串操作,比如转换大小写、统计字符频率、删除空白等。这些方法提高了编程的效率...

    Vidual Basic的字符处理

    3. **回文字符统计**:`hw`函数用于检查一个字符串是否为回文,即正读和反读都相同。通过比较字符串的前半部分和后半部分的对应字符来实现此功能。 4. **统计字母出现次数**:`Command1_Click`事件处理程序统计文本...

    sqlserver经典脚本大全.zip

    1.9.1 设置内存选项 1.9.2(2) 使用文件及文件组 1.9.2(3) 调整tempdb数据库的文件属性 2.1 日期概念理解中的一些测试 2.2.4 CONVERT在日期转换中的使用示例...3.5.3 字符串分拆并统计的处理示例 3.5.5 字符串处理示例--

    Python3.2中的字符串函数学习总结

    拆分类方法,如str.split(),可以按照指定的分隔符将字符串拆分成列表;组合类方法,如str.join(),则可以将列表中的字符串元素合并成一个新的字符串。 除了以上提到的内容,Python3.2中的字符串还支持很多通用操作...

    上海电机学院C语言实训答案

    例:若程序执行时,输入字符串为:Shanghai Dianji University,从键盘上输入字符:s,则输出后变为:Shanghai Dianji Univerity,如果输入的字符串不存在,则字符串照原样输出。 (9)编写一个函数void fun(char a...

    python入门与实践--作业21

    在Python编程语言中,我们...这六个练习涵盖了Python的基础知识,如随机数生成、数据结构(列表、集合、字典)、字符串操作、函数应用等,是学习Python的好实践。在实际编程中,还可以根据需求进行适当的优化和调整。

    PHP常用函数大全

    47. **str_word_count**: 统计字符串中的单词数量,支持多种分隔符,对于文本分析和摘要生成有重要作用。 48. **strcasecmp**: 二进制安全的不区分大小写的字符串比较,适用于多字节编码环境下的字符串比较。 以上...

    php函数iris整理

    - **`count_chars()`**: 统计字符串中每个字符的出现次数。 - **`crypt()`**: 返回加密后的字符串。 - **`echo()`**: 输出一个或多个字符串。 - **`explode()`**: 把字符串分割成数组。 - **`html_entity_decode()`*...

    解决字符长度8000限制

    例如,在进行分组统计、动态构建复杂查询等情况时,如果涉及大量的字段或条件,可能会导致SQL语句过长而无法执行。 #### 解决方案一:分批次执行SQL 一种常见的解决方案是通过将长SQL语句拆分成多个较短的SQL语句...

    C#实验考查题目

    26. 字符计数:遍历字符串,统计数字字符。 27. 删除数字字符:遍历字符串,移除数字字符。 28. 数值排序:接收三个整数,使用`Array.Sort()`进行排序。 29. 密码编码:基于特定规则替换字符,实现字符串编码。 ...

    总结office习题.docx

    优化版的插入排序如拆半插入,通过二分查找找到插入位置,降低时间复杂度。 7. **希尔排序**:希尔排序是插入排序的改进版,通过增量序列进行多趟排序,每趟排序减少增量,逐步缩小子序列,直到增量为1,最后进行一...

    三级C南开100题精华分类

    十、字符串(单词)的倒置和删除:测试字符串处理的灵活性,包括字符串的逆序、插入、删除等操作,以及对空格和标点符号的处理。 十一、选票问题:可能是数据结构的问题,例如使用链表存储选票数据,进行计票统计。...

    c++习题

    - 字符串的倒序可以通过构建新字符串并从后向前复制原字符串的字符来实现。 以上就是C++习题的主要知识点,涵盖数据类型转换、链表操作、字符串处理、算法应用等多个方面。这些题目对于理解C++的基础概念和提高...

Global site tag (gtag.js) - Google Analytics