Sql Server 为监控表(scada_info)的每一条记录生成一个随机时间,需要运用到Sql Server数据库中的日期处理函数(dateadd)、随机数(rand)、系统时间函数(getdate)、游标(cursor)知识点。
1、知识拓展 => 日期函数
-- 获取系统时间 --
select getdate();
-- dateadd 函数的使用 => 在日期中添加或减去指定的时间间隔 --
语法:dateadd(datepart,number,date)
date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
datepart 参数可以是下列的值:
年 => yy, yyyy
季度 => qq, q
月 => mm, m
年中的日 => dy, y
日 => dd, d
周 => wk, ww
星期 => dw, w
小时 => hh
分钟 => mi, n
秒 => ss, s
毫秒 => ms
微妙 => mcs
纳秒 => ns
示例:
--表示当前时间加一个月
select dateadd(mm,1,getdate());
--表示当前时间减一个月
select dateadd(mm,-1,getdate());
-- datediff 函数的使用 => 返回两个日期之间的时间 --
语法:datediff(datepart,number,date)
startdate 和 enddate 参数是合法的日期表达式。
datepart 参数 和 dateadd 的参数一致
示例:
-- 表示2000距离当前时间年的数值 --
select datediff(yy,'2000',getdate());
2、知识拓展 => rand 随机数
-- rand 函数的使用 => 返回一个随机数 --
语法:rand()
参数:seed,提供种子值的整数表达式(tinyint、smallint 或 int)。 如果未指定seed,则SQL Server数据库引擎随机分配种子值。对于指定的种子值,返回的结果始终相同。
示例:
--获取随机数
select rand()
--生成0-100之间的整数:
select cast( floor(rand()*100) as int)
3、为监控表(scada_info)的每一条记录生成一个随机时间
declare @temp_sid varchar(36)
-- 创建游标 --Local(本地游标)
declare aaa cursor for select sid from scada_info
-- 打开游标
Open aaa
-- 遍历和获取游标
fetch next from aaa into @temp_sid
--print @temp_sid
while @@fetch_status=0
begin
-- 生成100范围内的随机数,并給时间赋值
update scada_info set utime = dateadd(mi,cast(floor(rand()*100) as int),GETDATE())
where sid = @temp_sid
fetch next from aaa into @temp_sid -- 取值赋给变量
--
end
-- 关闭游标
Close aaa
-- 删除游标
Deallocate aaa
文章评论