从 Unix 毫秒时间戳获取时间

020*_*402 7 mysql timestamp type-conversion

我的MySQL版本是5.6;它有一个FROM_UNIXTIME功能。但它适用于 10 位数字的时间戳:1447430881。

mysql> SELECT FROM_UNIXTIME(1447430881);
        -> '2015-11-13 10:08:01'
Run Code Online (Sandbox Code Playgroud)

现在我想从毫秒时间戳中获取日期(例如 1556948248000),所以使用FROM_UNIXTIME我得到了NULL.

mysql> SELECT FROM_UNIXTIME(1556948248000);
        -> NULL
Run Code Online (Sandbox Code Playgroud)

不是有一个FROM_UNIXMILLITIME功能吗?

Aki*_*ina 6

通用解决方案(用于datetime >= '2001-09-09 04:46:40'- 请参阅评论)。

SELECT FROM_UNIXTIME(@time * POWER(10, 9 - FLOOR(LOG10(@time))));
Run Code Online (Sandbox Code Playgroud)

@time变量包含 unix 时间戳(任何精度)。例如,当为 时1556948248123,由 FROM_UNIXTIME 的参数表达式标准化为1556948248.123,结果将为2015-11-13 19:08:01.123000。当变量为1556948248.123或 时,会得到相同的结果,例如1.556948248123

该变量是一个占位符 - 它可以是字段名或数字文字。

如果需要,您可以创建自己的 UDF:

CREATE FUNCTION my_from_unixtime(arg DECIMAL(65, 30))
RETURNS DATETIME(6)
DETERMINISTIC
NO SQL
RETURN FROM_UNIXTIME(arg * POWER(10, 9 - FLOOR(LOG10(arg))));
Run Code Online (Sandbox Code Playgroud)