HSQLDB(HyperSQL)-如何以毫秒精度将UNIX时间戳获取为数字

时间:2018-10-01 15:28:21

标签: sql datetime hsqldb unix-timestamp hypersql

我正在尝试获取Java风格的long时间戳,即UNIX时间戳,精度为毫秒* 1000,它适合于非浮点类型(BIGINT)。 / p>

除非找到关于20181010123059123之类的格式的文件,否则我找不到从CURRENT_TIMESTAMP之类的函数直接获取它的方法。

所以我发现这会给我一些像数字的东西:

(CURRENT_TIMESTAMP - TIMESTAMP '2018-01-01 00:00:00') SECOND TO SECOND
-- Gives: 23649115.452000

请注意,我要减去2018-...,因为我只关心增量而不是绝对日期。

我不确定这是否是简单的方法。
原来这种类型是INTERVAL,所以我需要转换:

CAST(
    (CURRENT_TIMESTAMP - TIMESTAMP '2018-01-01 00:00:00') SECOND TO SECOND
    AS DECIMAL(15,3)
)
-- Gives 23649115.000

现在的问题是,精度丢失了。
所以我想知道:.452在哪里丢失了,我该如何保存?这就是the manual says

  

可以将间隔值强制转换为数字类型。在这种情况下,首先将间隔值转换为单字段INTERVAL类型,其字段与间隔值的最低有效字段相同。然后将该值转换为目标类型。例如,CAST(以INTVAL表示的年间隔为“ INTERVAL'1-11”,则为MONTVAL)将计算为INTERVAL'23'MONTH,然后为23。

最终的问题是:
如何从某个时刻开始获取类似于UNIX时间戳的毫秒数,例如UNIX时代开始了吗?

我当前的整个SQL:

SELECT  
(CURRENT_TIMESTAMP - TIMESTAMP '2018-01-01 00:00:00') SECOND TO SECOND,
FLOOR(
     CAST(
      (CURRENT_TIMESTAMP - TIMESTAMP '2018-01-01 00:00:00') SECOND TO SECOND
       AS DECIMAL(15,3)
     ) * 1000
) 
FROM (VALUES(0));
-- Gives: 23649115.452000 | 23649115000

1 个答案:

答案 0 :(得分:0)

结果是我忽略了free(因为损坏的PDF格式手册会导致无法正确搜索)。

UNIX_MILLIS

这使我的尝试间隔一定时间超过锻炼。

我仍然想知道,我应该SELECT UNIX_MILLIS() FROM (VALUES(0)) 间隔一个毫秒来保留毫秒部分。