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

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


够快速的提供客户一个方法,而我最最常见的方法就是利用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
?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值