ORACLE 随机数相关问题
2011-03-08 23:45
621 查看
1. 随机数包
SELECT DBMS_RANDOM.VALUE
FROM DUAL;
2. 在[0..100]范围内取随机数
SELECT TRUNC (DBMS_RANDOM.VALUE (0, 100))
FROM DUAL;
3. 大于字符‘A’的10个字符随机字符串
SELECT DBMS_RANDOM.STRING (’A’, 10)
FROM DUAL;
4. 单个小写随机字符
SELECT CHR (ROUND (DBMS_RANDOM.VALUE (97, 122)))
FROM DUAL;
5. 在过去10天内取随机日期
SELECT TO_DATE (TRUNC (DBMS_RANDOM.VALUE (TO_NUMBER (TO_CHAR (SYSDATE - 10,
’J’
)
),
TO_NUMBER (TO_CHAR (SYSDATE, ’J’))
)
),
’J’
)
FROM DUAL;
6. 在过去30分钟内取随机时间
SELECT (SYSDATE - 1 / 24 / 60 * 30) + DBMS_RANDOM.VALUE (1, 1800) / 3600 / 24
FROM DUAL;
7.在2010年7月1日---2011年3月8日之间,任取一个随机值;
SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(TO_NUMBER(TO_CHAR(to_date('20100701010101','yyyy-mm-dd hh24:mi:ss'), 'J')),
TO_NUMBER(TO_CHAR(to_date('20110308010101','yyyy-mm-dd hh24:mi:ss'), 'J')))),
'J')
FROM DUAL;
8.2010年7月1日以后的240天内随机取一个值
select to_date('20100701010101','yyyy-mm-dd hh24:mi:ss') + dbms_random.value(1,240) from dual;
9.产生随机日期
Oracle将日期作为过去某个关键日期(如果你好奇的话,我可以告诉你这个日期是公元前4712年1月1日)的整数偏移 量来保存。这就意味着你可以通过寻找与你希望的起始日期相对应的整数,然后向它加入一个随机的整数来随机生成一个指定范围内的日期。
使用TO_CHAR函数和‘J’格式代码,你可以为今天的日期生成一个内部日期数:
SELECT TO_CHAR(SYSDATE, 'J') FROM DUAL;
例如,要生成一个2003年内的任意日期,你可以首先确定2003年1月1日的日期整数;
SELECT TO_CHAR(TO_DATE('01/01/03','mm/dd/yy'),'J')FROM DUAL;
系统给的结果是2452641。所以要生成该年度内的任意日期,我们就要用带有low_value等于2452641和high_value等于 2452641+364参数的DBMS_RANDOM.VALUE,再把它转换成日期:
SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2452641,2452641+364)),'J') FROM DUAL;
SELECT DBMS_RANDOM.VALUE
FROM DUAL;
2. 在[0..100]范围内取随机数
SELECT TRUNC (DBMS_RANDOM.VALUE (0, 100))
FROM DUAL;
3. 大于字符‘A’的10个字符随机字符串
SELECT DBMS_RANDOM.STRING (’A’, 10)
FROM DUAL;
4. 单个小写随机字符
SELECT CHR (ROUND (DBMS_RANDOM.VALUE (97, 122)))
FROM DUAL;
5. 在过去10天内取随机日期
SELECT TO_DATE (TRUNC (DBMS_RANDOM.VALUE (TO_NUMBER (TO_CHAR (SYSDATE - 10,
’J’
)
),
TO_NUMBER (TO_CHAR (SYSDATE, ’J’))
)
),
’J’
)
FROM DUAL;
6. 在过去30分钟内取随机时间
SELECT (SYSDATE - 1 / 24 / 60 * 30) + DBMS_RANDOM.VALUE (1, 1800) / 3600 / 24
FROM DUAL;
7.在2010年7月1日---2011年3月8日之间,任取一个随机值;
SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(TO_NUMBER(TO_CHAR(to_date('20100701010101','yyyy-mm-dd hh24:mi:ss'), 'J')),
TO_NUMBER(TO_CHAR(to_date('20110308010101','yyyy-mm-dd hh24:mi:ss'), 'J')))),
'J')
FROM DUAL;
8.2010年7月1日以后的240天内随机取一个值
select to_date('20100701010101','yyyy-mm-dd hh24:mi:ss') + dbms_random.value(1,240) from dual;
9.产生随机日期
Oracle将日期作为过去某个关键日期(如果你好奇的话,我可以告诉你这个日期是公元前4712年1月1日)的整数偏移 量来保存。这就意味着你可以通过寻找与你希望的起始日期相对应的整数,然后向它加入一个随机的整数来随机生成一个指定范围内的日期。
使用TO_CHAR函数和‘J’格式代码,你可以为今天的日期生成一个内部日期数:
SELECT TO_CHAR(SYSDATE, 'J') FROM DUAL;
例如,要生成一个2003年内的任意日期,你可以首先确定2003年1月1日的日期整数;
SELECT TO_CHAR(TO_DATE('01/01/03','mm/dd/yy'),'J')FROM DUAL;
系统给的结果是2452641。所以要生成该年度内的任意日期,我们就要用带有low_value等于2452641和high_value等于 2452641+364参数的DBMS_RANDOM.VALUE,再把它转换成日期:
SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2452641,2452641+364)),'J') FROM DUAL;
相关文章推荐
- ORACLE-DBA相关知识,性能问题分析(一)
- oracle相关问题
- 关于ORACLE的ora-12505报错以及连接问题的解决及相关资料
- oracle相关部分小问题集锦
- ORACLE-DBA相关知识,性能问题分析(一)
- linux+11g R2 ORACLE 安装过程及遇到相关问题解决方案
- oracle中字符集的相关问题
- Oracle 碰到的相关问题及解决
- 关于ORACLE的ora-12505报错以及连接问题的解决及相关资料
- oracle字符集相关问题
- C语言中随机数相关问题
- Oracle垃圾数据清理相关问题 分类: Oracle 2015-08-06 11:14 12人阅读 评论(0) 收藏
- oracle事务管理相关问题总结
- Oracle 10g及pro*c相关问题及解决方法
- 关于ORACLE的ora-12505报错以及连接问题的解决及相关资料
- Oracle学习(七)----查询Top—N问题 & 相关子查询
- Windows 7下安装Oracle 11g相关问题解决方法
- Oracle垃圾数据清理相关问题
- oracle使用相关问题
- 探讨PHP获取Oracle数据乱码的相关问题解决办法