欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

偏题

更新时间: 2014-01-05 02:10:33 责任编辑: Author_N1

 

难点
写存储过程插入数据
时间有要求 取从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;

这样应该能够满足需要。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:10:33
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6546/
本文WWW.DOC100.NET DOC100.NET版权所有。