MySQL将秒转换为datetime

时间:2015-08-04 06:42:23

标签: mysql datetime seconds

所以我有一个整数' 63605914755'像这样:

SELECT TO_SECONDS( '2015-08-04 13:40:56' )
-----
Result: '63605914755'

如何转换' 63605914755'从秒到日期时间(例如:' 2015-08-04 13:40:56')?

2 个答案:

答案 0 :(得分:2)

SELECT
  from_unixtime(seconds - to_seconds('1970-01-01 00:00:00')) as my_date_time
FROM 
  your_table

这是SQLFiddle

答案 1 :(得分:0)

另一种方法是简单地将秒数加回到0000-01-00的基准日期。但是,使用0000-01-00将导致NULL,因此我们必须指定每月0000-01-01的第一天。
这将导致日期推迟1天。为了解决这个问题,我们只需从结果日期中减去1天:

示例:http://sqlfiddle.com/#!9/58dad/199

SELECT '0000-01-01' + INTERVAL TO_SECONDS('2015-08-04 13:40:56') SECOND - INTERVAL 1 DAY;

结果:

2015-08-04 13:40:56

要创建FROM_SECONDS函数,请使用:

DELIMITER //
CREATE FUNCTION `FROM_SECONDS`(
    `secs` BIGINT
)
RETURNS DATETIME
DETERMINISTIC
NO SQL
SQL SECURITY INVOKER
BEGIN
    RETURN '0000-01-01' + INTERVAL secs SECOND - INTERVAL 1 DAY;
END//
SELECT FROM_SECONDS(TO_SECONDS('2015-08-04 13:40:46'));

由于DATETIME的值是时间参考点(静态),因此上述查询可以为DETERMINISTIC,因为所提供的秒数的结果值始终相同。


注意:
由于Unix Epoch日期是基于UTC的,因此当您的MySQL服务器使用带有偏移量的时区时,使用FROM_UNIXTIME(seconds - seconds_from_epoch)时,结果日期时间将以该偏移量为准。 default timezone used by MySQL is the SYSTEM timezone
对于使用FROM_UNIXTIME的EST,将得到2015-08-04 09:40:56

要解决此问题,您需要计算UTC_TIMESTAMPCURRENT_TIME之间的分钟差,并从FROM_UNIXTIME中减去所得的分钟偏移量。如果您的服务器使用UTC,则此操作无效,因为结果偏移量将为0。

SELECT FROM_UNIXTIME(TO_SECONDS('2015-08-04 13:40:56') - TO_SECONDS('1970-01-01 00:00:00')) - INTERVAL TIMESTAMPDIFF(MINUTE, UTC_TIMESTAMP(), NOW()) MINUTE;

结果:

2015-08-04 13:40:56