【问题标题】:How can I convert MySQL date stored as negative (signed) bigint to date format?如何将存储为负(签名)bigint 的 MySQL 日期转换为日期格式?
【发布时间】:2018-02-15 19:07:28
【问题描述】:

我将出生日期存储在 MySQL 数据库中,我需要将其转换为可读的日期格式 yyyy-mm-dd hh:mm:ss。我不能使用 MySQL 的 From_Unix 函数,因为许多出生日期都在 1970 年之前,并且该函数返回 NULL。 (即 -866138400000,即 07/21/1942)

我曾尝试使用刻度,但这也返回了NULL

(FROM_DAYS(365 + (req.PATIENTDOB / 864000000000)) + INTERVAL (req.PATIENTDOB % 864000000000) / 10000000 SECOND) AS ptDob

任何进展将不胜感激。谢谢。

【问题讨论】:

  • 所以自 1970 年以来该值仍以微秒的形式存储。负值表示 1970 年之前。只是把它写下来,因为我花了一秒钟才理解

标签: mysql datetime bigint


【解决方案1】:

我不知道你为什么要把事情弄得这么复杂。只需除以 1000 即可得到秒而不是微秒,然后从 1970-01-01 中减去。

mysql > select '1970-01-01' + interval -866138400000/1000 second;
+---------------------------------------------------+
| '1970-01-01' + interval -866138400000/1000 second |
+---------------------------------------------------+
| 1942-07-22 06:00:00                               |
+---------------------------------------------------+
1 row in set (0.00 sec)

所以你的查询当然是这样的:

select '1970-01-01' + interval your_column / 1000 second from your_table;

此查询证明,您的假设是 1942-07-21 是错误的。 1942-07-22 是正确的。

mysql > select timestampdiff(second, '1942-07-21', '1970-01-01');
+---------------------------------------------------+
| timestampdiff(second, '1942-07-21', '1970-01-01') |
+---------------------------------------------------+
|                                         866246400 |
+---------------------------------------------------+

【讨论】:

    【解决方案2】:

    在研究 Negative Epochs 时找到了答案。毕竟我可以使用 From_Unixtime 函数!

    select date_format((DATE_ADD(FROM_UNIXTIME(0), interval -866138400000/ 1000 second)),'%Y-%m-%d') as ptdate; ->“1942-07-21”

    链接到Reference > 查看负面时期部分

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 2011-08-13
      • 1970-01-01
      • 2012-09-30
      • 2010-11-23
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 2018-02-12
      相关资源
      最近更新 更多