如何将存储为负(带符号)bigint 的 MySQL 日期转换为日期格式?

How can I convert MySQL date stored as negative (signed) bigint to date format?

我的出生日期存储在 MySQL 数据库中,我需要将其转换为可读的日期格式 yyyy-mm-dd hh:mm:ss。我无法使用 MySQL 的 From_Unix 函数,因为许多出生日期都在 1970 年之前,而函数 returns NULL。 (即 -866138400000,即 1942 年 7 月 21 日)

我试过使用 ticks 但它也在返回 NULL:

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

如有任何预付款,我们将不胜感激。谢谢。

我不明白你为什么要把事情搞得这么复杂。只需除以 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 |
+---------------------------------------------------+

在研究负纪元时找到了答案。我终于可以使用 From_Unixtime 功能了!

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

Link 到 Reference > 在 Negative Epochs 部分下查看