专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Oracle技术

难点解决思路

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
难点
写存储过程插入数据
时间有要求 取从1999-01-01到2013-07-01中获取随机一天;(周末和周日除外)
这个时间什么得到呢
------解决方案--------------------
select t.adate
from (select to_date('1999-01-01','yyyy-mm-dd')+level-1  adate,row_number() over(order by dbms_random.value) rn
      from dual
      where to_char(to_date('1999-01-01','yyyy-mm-dd')+level-1,'day')not in ('星期六','星期日')
      connect by level <= to_date('2013-07-01','yyyy-mm-dd')-to_date('1999-01-01','yyyy-mm-dd')+1
      ) t
where t.rn=1;

------解决方案--------------------
引用:
select t.adate
from (select to_date('1999-01-01','yyyy-mm-dd')+level-1  adate,row_number() over(order by dbms_random.value) rn
      from dual
      where to_char(to_date('1999-01-01','yyyy-mm-dd')+level-1,'day')not in ('星期六','星期日')
      connect by level <= to_date('2013-07-01','yyyy-mm-dd')-to_date('1999-01-01','yyyy-mm-dd')+1
      ) t
where t.rn=1;


方法上可行,不过有点浪费cpu和内存了。
可以折衷下,例如
DECLARE
  VN_A  NUMBER;
  vn_random number;
  vt_day date;
BEGIN
  VN_A:="2013-07-01"-"1900-01-01" ; --写个意思.
  vn_random:=dbms_random.value(1,vn_a);
  vt_day:="1900-01-01"+vn_random;
  --然后如果vt_day是周六或者周日那么就切换为下一个周一或者上个周五。  
END;

这样应该能够满足需要。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: