提取某nTEXT列中的特定格式字符串

简介:
最近,项目要求统计所有文章中出现的各支股票次数.文章内容存储在content列中,content为ntext类型.提取了一百行结果,得出下面规律:
1,在文章内容中区分股票可以用股票代码,股票代码为六位数字
2,股票代码都写在括号中,但括号中不一定都是股票代码
3,在括号中的股票代码前可能会出现"沪:","沪A:"等字符
   再加上ntext中每个字符都是占用两位长度,即a和阿都是两个字节,这样的话去除上面3中说的内容就比较容易了.
   考虑上面因素以后,我决定用游标遍历所有行,在行中先用charindex找出文章中前括号出现的位置,然后加1位进入括号内部,如果第一位不是数字第三位是数字,则删去括号中前两位的内容,如果第一位不是数字第四位是数字,则删去括号中前三位的内容.然后再在得到的新字符串中取括号后的六位,判断这六位如果是数字(股票代码都是数字组成),则输出后并去掉已提取过的括号查找下一括号.如果不是数字则直接查找下一括号.最后遍历所有行,取出文章中出现的所有代码并放入临时表中,最后再对临时表中的内容进行简单统计即可得出结果.
代码如下:
-------------------------------------------------------------------------------
/******提取股票出现的次数******/
create table #text_test_a(symbol varchar(20))
--临时表说明:存放在content中出现过的股票代码
truncate table #text_test_a
/*****创建游标从content列中取出股票代码******/
--由于在一行中可以出现多个股票代码,所以循环
--从每一行中取出所有股票代码

declare cur cursor 
for select cast(content as nvarchar(4000)) from news
--不能声明ntext数据类型,所以要转换成nvarchar类型
declare @content nvarchar(4000)
open cur
fetch next from cur into @content
while @@fetch_status=0
begin
while charindex('(',@content,0)>0
--如果行中存在括号则进入以下循环
begin
if isnumeric(substring(@content,charindex('(',@content,0)+1,1))=0 and isnumeric(substring(@content,charindex('(',@content,0)+3,1))=1
--由于括号中可能会出现“沪:600001”之类的股票代码,所以去除“沪:”
begin
set @content=stuff(@content,charindex('(',@content,0)+1,2,'')
end
if isnumeric(substring(@content,charindex('(',@content,0)+1,1))=0 and isnumeric(substring(@content,charindex('(',@content,0)+4,1))=1
--由于括号中可能会出现“沪A:600001”之类的股票代码,所以去除“沪A:”
begin
set @content=stuff(@content,charindex('(',@content,0)+1,3,'')
end
if isnumeric(substring(@content,charindex('(',@content,0)+1,6))=0
--如果括号中不为股票代码(即数字,.HK的股票代码也去掉),则忽略此括号,查找行中的下一括号的内容
begin
set @content=stuff(@content,1,charindex('(',@content,0)+1,'')
end
else
--如果是股票代码,则将其放入到临时表中,然后查找行中下一括号中的内容
begin
insert into #text_test_a
select substring(@content,charindex('(',@content,0)+1,6)
set @content=stuff(@content,1,charindex('(',@content,0)+1,'')
--select @content
end
end
fetch next from cur into @content
end
close cur
deallocate cur
--
/******统计每支股票出现的次数******/
select symbol,count(symbol) as coun from #text_test_a
group by symbol
order by symbol desc









本文转自 boyi55 51CTO博客,原文链接:http://blog.51cto.com/boyi55/46102,如需转载请自行联系原作者
目录
相关文章
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
271 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
663 219
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
349 34
Meta SAM3开源:让图像分割,听懂你的话
|
10天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1571 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
897 61
|
7天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
295 140