Mysql Unix_timestamp函数

时间:2012-07-26 11:54:27

标签: mysql

在oracle将此日期2012-07-03 11:38:41转换为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给我相同的值?

2 个答案:

答案 0 :(得分:1)

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

最有可能的是,两台服务器的时区设置相差一小时。

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

答案 1 :(得分:1)

我用过这个技巧 unix_timestamp(cast(sys_extract_utc(systimestamp)as date

然后我还编写了一个名为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;
/