2017-09-07 69 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>查找下負曆元部分

相關問題