如何将存储为负(签名)bigint的MySQL日期转换为日期格式?

时间:2017-09-07 06:49:36

标签: mysql datetime bigint

我的出生日期存储在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

任何进步都将不胜感激。谢谢。

2 个答案:

答案 0 :(得分: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 |
+---------------------------------------------------+

答案 1 :(得分:0)

在研究负面时代时找到答案。毕竟我能够使用From_Unixtime函数!

select date_format((DATE_ADD(FROM_UNIXTIME(0), interval -866138400000/ 1000 second)),'%Y-%m-%d') as ptdate; - > " 1942年7月21日"

Reference>的链接在负面时期部分下看