我正在尝试获取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
答案 0 :(得分:0)
结果是我忽略了free
(因为损坏的PDF格式手册会导致无法正确搜索)。
UNIX_MILLIS
这使我的尝试间隔一定时间超过锻炼。
我仍然想知道,我应该SELECT UNIX_MILLIS() FROM (VALUES(0))
间隔一个毫秒来保留毫秒部分。