MySQLのFROM_UNIXTIME()で負の値を扱う

こんにちは、さるまりんです。

MySQLの関数FROM_UNIXTIME()はUnixタイムスタンプの値を日付の形式に変換してくれます。

これは便利と思って使っていたのですが、なぜか結果がnullになっているものが。。。

試してみると負の数(Unixエポック、1970-01-01 00:00:00以前のタイムスタンプ)を渡してしまうとnullが返ってくるようです。

mysql> SELECT FROM_UNIXTIME(-252864000);
+---------------------------+
| FROM_UNIXTIME(-252864000) |
+---------------------------+
| NULL |
+---------------------------+
1 row in set (0.00 sec)

なんとか負の数からも正しい日付を取れないか?

関数DATE_ADD()と組み合わせて使うこんな方法で取得できました。

SELECT DATE_ADD(FROM_UNIXTIME(0), INTERVAL [負の数] SECOND)

FROM_UNIXTIME()で取得するのは0(=1970-01-01 00:00:00)、これに[負の数]をDATE_ADD()で足しています。

やってみます。

mysql> SELECT DATE_ADD(FROM_UNIXTIME(0), INTERVAL -252864000 SECOND);
+--------------------------------------------------------+
| DATE_ADD(FROM_UNIXTIME(0), INTERVAL -252864000 SECOND) |
+--------------------------------------------------------+
| 1961-12-27 08:00:00 |
+--------------------------------------------------------+
1 row in set (0.00 sec)

ちゃんと日付が取得されています。

FROM_UNIXTIME()が負の数を変換できないことを知らなかったのでちゃんと試してみなければバグになってました。テストって大事です。

読んでくださってありがとうございました。

それではまた!