您的位置:首页 > 数据库

【SQL server】创建零时表格,实现数据的分析

2013-03-11 13:31 471 查看
在进行客户技术支持时常常会遇到这样的问题,就是客户需要一个功能,但是我们没有办法很好的支持和满足,但是又希望能

够快速的提供客户一个方法,而我最最常见的方法就是利用sql去直接对数据库进行处理

 

有以下两张表格

一张为,存储序号的信息

一张为,存储的一些和IP地址有关系的memo的表格

但是由于memo中信息太多,并不是每个都有用处,因此需要将memo中的信息剔除一些,保留以下所需要的就可以了。

其中需要提出的信息包括了IP地址,IP地址有个大家都知道,每个段位都是0-255,因此如果要做活了,就要做个循环,笔者我现在只要两层循环就可以了。因为我有一个IP地址循环范围。

 

drop table #info2
CREATE TABLE #Info2(
event_date datetime NULL,
meter_code varchar(max) NOT NULL,
IP varchar(max) NULL,
Name nvarchar(max) NULL)

这个是一个零时表格,其实在建立零时表格之前,我的所有的测试工作都是在建立的实体表格中建立的。最后只要建立的时候,根据实际建立表格是表格名字建立为#info就可以了,就是一个在一个查询页中的建立的一个零时表格

 

declare @ip varchar(20)
declare @ipj Varchar(20)
declare @ipi Varchar(20)
declare @name varchar(max)
declare @a varchar(max)
declare @i int
declare @j int
declare @endtime varchar(500)
declare @starttime varchar(500)


在这里我定义了一下变量,其中IP1.IP2.IP3.IP4

这里的IPj指的是IP3 IPi指的是IP4

i和j就是两个和IP数据值有关系的变量 0-255的这个变量

@name和@a是两个之间相互有关系的变量,只是为了方便,将其中一个赋值给另外一个。

set @starttime='2012-08-01 00:00:00'						------------Query Startime
set @endtime='2012-08-07 00:00:00'							------------Query Endtime


这个是为了方便输入时间信息,因为有两条SQL要变化时间

set @j=0
while @j<=22
begin
set @ipj=''+@j+''
set @i=1
while @i<=255
begin
set @ipi=''+@i+''
set @ip='10.72.'+@ipj+'.'+@ipi
SET @a=(select top 1 eventmemo from acquireevent where eventdate between ''+@starttime+'' and ''+@endtime+'' and eventmemo like '%Establish communication link%' and eventmemo like '%'+@ip+':%' order by acquireevent.eventdate desc)
set @name=(SELECT SUBSTRING(@a,PATINDEX('%Concentrator Name:%',@a)+18,200))

insert into #Info2 select top 1 acquireevent.eventdate, meter_record.meter_code,
@ip as ip,
@name as Concentrator_Name/*,
eventmemo*/
from acquireevent
inner join meter_record on  acquireevent.changzhanid=meter_record.changzhanid
and acquireevent.ertuid=meter_record.ertuid
where  eventdate between ''+@starttime+'' and ''+@endtime+''
and eventmemo like '%Establish communication link%' and eventmemo like '%'+@ip+':%'
order by acquireevent.eventdate desc
set @i=@i+1
end
set @j=@j+1
end


这边就是两个嵌套循环。

set @name=(SELECT SUBSTRING(@a,PATINDEX(‘%Concentrator Name:%',@a)+18,200))


这句话石所有中的最重要的重点,因为原来的memo文件中含有的东西太多,显示出来极不方便去看,而memo总所有的名字都含有Concentrator Name:这个字符,而这里的18 指的就是concentrator name:这个字符的长度,而200就是所显示的长度,这个是我在论坛上提的,高手的回答,如下:

假设:TableA

有以下属性
date 
NO 
memo

date         NO   memo
2012-01-01   1    connect from 10.101.1.1 from NO address: 192.168.1.1 
2012-01-01   2    connect from 10.101.1.2 from NO address: 192.168.1.2 
2012-01-01   3    connect from 10.101.1.3 from NO address: 192.168.1.3

如果我写
select from TableA  where memo like '%10.101.1.1%'

那么得到的结果就是
date         NO   memo
2012-01-01   1    connect from 10.101.1.1 from NO address: 192.168.1.1 

我想知道如果我想得到的结果是

date         NO   memo
2012-01-01   1    10.101.1.1

我的这个SQL该如何去写?

如果你的数据格式固定的话,下面语句可以查找两个from之间的结果,那个5是from这四个字母加上一个空格

SQL code

?
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: