MySQL将秒转换为日期时间

oxalkeyp  于 2022-12-17  发布在  Mysql
关注(0)|答案(2)|浏览(128)

因此,我有一个整数'63605914755',如下所示:

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

如何将“63605914755”从秒转换回日期时间(例如:'2015年8月4日13:40:56')?

p1iqtdky

p1iqtdky1#

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

这是一个SQLFiddle

k4emjkb1

k4emjkb12#

另一种方法是简单地将秒数加回0000-01-00的基准日期,但是,使用0000-01-00将导致NULL,因此我们必须指定0000-01-01月份的第一天。
这会导致日期偏离1天。为了说明这一点,我们只需从结果日期中减去1天:

示例:https://dbfiddle.uk/YNJ7Q856

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函数,请用途:
一个二个一个一个

  • 由于DATETIME值是时间点引用(静态),因此上述查询可以是DETERMINISTIC,因为所提供秒的结果值始终相同。*
    注:

由于Unix纪元的日期是基于UTC的,当MySQL服务器使用带有偏移量的时区时,使用FROM_UNIXTIME(seconds - seconds_from_epoch),得到的日期时间将偏移该偏移量。
对于EST,使用FROM_UNIXTIME将导致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

相关问题