2017-09-07 12 views
0

生年月日は、必要なMySQLデータベースに保存されており、読める日付形式yyyy-mm-dd hh:mm:ssに変換されています。 MySQLのFrom_Unix関数を使用することはできません。なぜなら、多くの生年月日は1970年以前であり、関数はNULLを返します。 (すなわち-866138400000 1942年7月21日である)負の(符号付き)bigintとして保存されたMySQLの日付を日付形式に変換するにはどうすればよいですか?

Iティックを使用することを試みたが、それはまたNULLを返して:

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

任意の進歩は非常に高く評価されるだろう。ありがとうございました。

+0

ので、値はまだ1970年以来、マイクロ秒として保存され、負の値は、1970年前に意味の下で見てちょうど理解するのに二分の一時間かかったので書き留めた – RealCheeseLord

答えて

1

なぜあなたは物事が複雑になっているのかわかりません。マイクロ秒の代わりに秒を取得するために1000で割り、1970年1月1日からそれを減算するだけです。

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へ>負のエポックセクション

関連する問題