将sysdate转换为13位数字oracle sql

时间:2017-03-16 19:48:47

标签: sql oracle

我需要在oracle中将sysdate转换为13位数字(Unix时间戳编号)。 请分享这个sql。

示例:1486015200000 日期:02/02/2017

有关数字参考,请在下面的链接中使用1486015200000 http://www.timestampconvert.com/

3 个答案:

答案 0 :(得分:1)

unix生成时间戳的方式,它是自1970年1月1日午夜协调世界时(UTC)以来经过的秒数。

你应该可以使用

select (
  timestamp '1970-01-01 00:00:00 GMT' + numtodsinterval(1486015200000 /1000, 'SECOND'))
   at LOCAL 
from dual;

NUMTODSINTERVAL doc

答案 1 :(得分:0)

原则上这很容易:任何约会。减去日期文字date '1970-01-01'。用括号括起差值乘以86400000。

即:日期差异(在Oracle中)以天为单位。一天有24 * 24 * 60 = 86,400秒和86,400,000毫秒。 13位“unix time”是自UTC时间1970年1月1日午夜起经过的毫秒数。

您链接到的网站上的计算时间为6小时,因此我假设您居住在美国中部时区的某个地方(或者可能位于同一时区的其他地方,北美或中美洲或南美洲) 。网站假定输入在您的时区。在Oracle中,日期是抽象的,它们不是“在时区中”。

select sysdate, (sysdate - date '1970-01-01') * 86400000 as unix_time from dual;

SYSDATE              UNIX_TIME
-------------------  -------------
03/16/2017 15:17:32  1489677452000

答案 2 :(得分:0)

这应该有效:

SELECT (COLUMN_WITH_ORACLE_DATE_VALUE - TO_DATE('1970-01-01', 'YYYY-MM-DD')) * 86400000 FROM DUAL;

示例:

SELECT (TO_DATE('02/02/2017','MM/DD/YYYY') - TO_DATE('01/01/1970', 'MM/DD/YYYY')) * 86400000 FROM DUAL;