Mysql

從 Unix 毫秒時間戳獲取時間

  • December 5, 2019

我的 MySQL 版本是 5.6;它有一個FROM_UNIXTIME功能。但它適用於 10 位數的時間戳:1447430881。

mysql> SELECT FROM_UNIXTIME(1447430881);
       -> '2015-11-13 10:08:01'

現在我想從毫秒時間戳(例如 1556948248000)中獲取日期,所以使用FROM_UNIXTIMEI got NULL

mysql> SELECT FROM_UNIXTIME(1556948248000);
       -> NULL

沒有FROM_UNIXMILLITIME功能嗎?

通用解決方案(對於datetime >= '2001-09-09 04:46:40'- 見評論)。

SELECT FROM_UNIXTIME(@time * POWER(10, 9 - FLOOR(LOG10(@time))));

@time變數包含 unix 時間戳(任何精度)。例如,當它是 時1556948248123,它被 FROM_UNIXTIME 的參數表達式正規化1556948248.123,結果將是2015-11-13 19:08:01.1230001556948248.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))));

引用自:https://dba.stackexchange.com/questions/239529