2012-07-26 45 views
2

在甲骨文将在此日期2012-07-03 11时38分41秒至UNIX_TIMESTAMP我们得到Mysql的UNIX_TIMESTAMP函数

select (to_date('2012-07-03 11:38:41','YYYY-MM-DD HH24:MI:SS') - 
    to_date('1970-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS'))*86400 as unix_timestamp 
    from dual 
SQL>/

UNIX_TIMESTAMP 
-------------- 
    1341315521 

但是当我试图同MySQL服务器

select UNIX_TIMESTAMP('2012-07-03 11:38:41') 
1341311921 

服务器设置上是这样的

**mysql**> select current_timestamp(); 
+---------------------+ 
| current_timestamp() | 
+---------------------+ 
| 2012-07-26 15:27:31 | 
+---------------------+ 
1 row in set (0.00 sec) 

**Unix** >Thu Jul 26 15:27:56 BST 2012 

**oracle**>select current_timestamp from dual; 

CURRENT_TIMESTAMP 
------------------------------------ 
26-JUL-12 15.27.16.967258 +01:00 

我如何确保oracle和mysql给我相同的值?

回答

1

您显示的两个值之间的差异是3600秒,即1小时。

很可能,两台服务器的时区设置相差一个小时。

有关mySQL服务器中的时区信息,请参见https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.htmlHere是Oracle处理时区的一些深入信息。

+0

道歉,我忘了提,无论是服务器托管在一个功能同一个Unix机箱虽然 – 2012-07-26 12:09:30

+0

@jhon很好观察,然后mySQL或Oracle被设置为错误的时区。哪一个返回服务器所在的时间戳? – 2012-07-26 12:10:58

+0

我已经更新了Mysql Oracle的当前时间戳设置问题和Unix,他们似乎不是o关闭3600秒有趣 – 2012-07-26 12:23:53

1

我用这一招 UNIX_TIMESTAMP(CAST(sys_extract_utc(SYSTIMESTAMP)的日期

然后,我还写了所谓的UNIX_TIMESTAMP

create or replace 
function unix_timestamp(in_date date) 
return number DETERMINISTIC PARALLEL_ENABLE AS 
l_date date; 
begin 
return trunc((in_date -to_date ('01-jan-1970', 'dd-mon-yyyy'))*86400); 
end; 
/