【SQL】按每5分钟生成全天的时间列表

select to_char((daybegin + (level - 1) * 5 / 1440), 'yyyy-mm-dd hh24:mi:ss') as newdaybegin
  from (select (trunc(sysdate, 'dd')) as daybegin from dual)
connect by level <= 288

后面话单报表开发要用到,记录一下。睡觉

这个更好点:

select to_char((daybegin + (level - 1) * 5 / 1440) - 5 / 1440,
               'yyyymmddhh24:mi:ss') as last5time,
       to_char((daybegin + (level - 1) * 5 / 1440), 'yyyymmddhh24:mi:ss') as this5time
  from (select (trunc(sysdate, 'dd')) as daybegin from dual)
connect by level <= 288

对于每5分钟的话单处理,我的想法是:

1

直接采用上面的sql预先生成一个每5分钟(含上5分钟和这个5分钟)的时间表。

可以一次性初始化一个列表(比如一次性初始1年的数据),然后程序启动时读取这个列表,根据最小的时间值(last5time上建立索引)进行统计。

这样可以防止因为程序异常(比如僵死,很久没有运行)而造成话单处理丢失的情况。

每次处理完成后,将该5分钟的时间值删除,下次程序直接提取最小的last5time值即可。

2

或者在时间间隔表上增加一列标志位(默认为0),标志位当前时间值是否被处理过,如果处理过则标记为1。

在该列上建立联合索引(本来想建立bitmap索引,但是bitmap索引列不推荐update操作,所以摒弃),这样不需要删除时间值,也可以防止索引碎片和倾斜。


个人感觉更好的方法是,按照1的方法,然后按照last5time建立为索引组织表即可。(这个方法可以防止段碎片!睡觉

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值