2017-09-07 48 views
0

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

我曾尝试使用蜱但也返回NULL

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

任何预先将不胜感激。谢谢。

+0

所以价值自1970年以来仍保存为微秒,1970年之前负值意味着仅仅写下来,因为它花了我一秒才明白 – RealCheeseLord

回答

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年7月21日是错误的。 1942-07-22是正确的。

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

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

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

链接Reference>查找下负历元部分

相关问题