oracle中日期类型与unix 时间戳的转换

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值