Oracle 的随机数、随机日期和时间、随机字符串 Oracle与Unix时间戳的转换
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;
Oracle随机函数
Sql代码
--创建55到100之间随机数
select dbms_random.value, dbms_random.value(55,100) from dual;
--创建2009年内的随机时间
SELECT
to_timestamp('2009-01-01 00:00:01','yyyy-mm-dd HH24:MI:SS') +DBMS_RANDOM.VALUE(1,365*24*3600)/3600/24
FROM DUAL
--随机查看前N条记录(随机读取表内容)
SELECT * FROM (SELECT * FROM chifan ORDER BY dbms_random.random) WHERE ROWNUM< =5
unix/linux 时间戳转换为标准时间格式(主要是注意时区问题):
sql代码
select TO_DATE('19700101','yyyymmdd') + 1235728935/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24 from dual,其中1235728935就是unix/linux时间戳,转换完之后就表示为 2009-2-27 18:02:15。
反过来也一样,还是要考虑时区
select (to_date('2009-2-27 18:02:15','yyyy-mm-dd hh24:mi:ss') - to_date('1970-1-1','yyyy-mm-dd'))*86400- TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))*3600 from dual






最近评论