Unix时间戳记是从'1970-01-01 00:00:00'GMT开始的秒数,表现为整数型。
Oracle中的时间是Date型,以下函数提供了两种时间转换的Oracle函数
(1)从Unix时间戳记转换为Oracle时间
create or replace function unix_to_oracle(in_number NUMBER) return date is
begin
return(TO_DATE('19700101','yyyymmdd') + in_number/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24);
end unix_to_oracle;
(2)由Oracle时间Date型转换为Unix时间戳记
create or replace function oracle_to_unix(in_date IN DATE) return number is
begin
return( (in_date -TO_DATE('19700101','yyyymmdd'))*86400 - TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))*3600);
end oracle_to_unix;
1. 随机数包
1
2
|
SELECT
DBMS_RANDOM.VALUE
FROM
DUAL;
|
2. 在[0..100]范围内取随机数
1
2
|
SELECT
TRUNC (DBMS_RANDOM.VALUE (0, 100))
FROM
DUAL;
|
3. 大于字符‘A’的10个字符随机字符串
1
2
|
SELECT
DBMS_RANDOM.STRING (
'A'
, 10)
FROM
DUAL;
|
4. 单个小写随机字符
1
2
|
SELECT
CHR (ROUND (DBMS_RANDOM.VALUE (97, 122)))
FROM
DUAL;
|
5. 在过去10天内取随机日期
1
2
3
4
5
6
7
8
9
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分钟内取随机时间
1
2
|
SELECT
(SYSDATE - 1 / 24 / 60 * 30) + DBMS_RANDOM.VALUE (1, 1800) / 3600 / 24
FROM
DUAL;
|
随机函数
1
2
3
4
5
6
7
8
9
|
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代码
1
|
select
TO_DATE(
'19700101'
,
'yyyymmdd'
) + 1235728935/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24
from
dual,其中1235728935就是unix/linux<strong style=
"background-color: rgb(160,255,255); color: black"
>时间戳</strong>,<strong style=
"background-color: rgb(255,153,153); color: black"
>转换</strong>完之后就表示为 2009-2-27 18:02:15。
|
反过来也一样,还是要考虑时区
1
|
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
|