所以我有一个整数' 63605914755'像这样:
SELECT TO_SECONDS( '2015-08-04 13:40:56' )
-----
Result: '63605914755'
如何转换' 63605914755'从秒到日期时间(例如:' 2015-08-04 13:40:56')?
答案 0 :(得分:2)
SELECT
from_unixtime(seconds - to_seconds('1970-01-01 00:00:00')) as my_date_time
FROM
your_table
答案 1 :(得分:0)
另一种方法是简单地将秒数加回到0000-01-00
的基准日期。但是,使用0000-01-00
将导致NULL
,因此我们必须指定每月0000-01-01
的第一天。
这将导致日期推迟1天。为了解决这个问题,我们只需从结果日期中减去1天:
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_TIMESTAMP
和CURRENT_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