DataBase MySQL

MySQLの時間の計算・比較

投稿日:2013年5月25日 更新日:

列同士を比較する

datetime型をそのままプラス・マイナスしてはいけません!!

例えば、

mysql> select * from test;
+---------------------+---------------------+
| start               | end                 |
+---------------------+---------------------+
| 2013-05-16 11:59:48 | 2013-05-16 12:00:31 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> select end - start from test;
+-------------+
| end - start |
+-------------+
| 4083.000000 |
+-------------+
1 row in set (0.00 sec)

恐らく普通に考えて想定される結果は、43秒なのではないでしょうか?
なぜ4083になるかというと、
2013-05-16 12:00:31 は 20130516120031
2013-05-16 11:59:48 は 20130516115948
そのため
20130516120031 - 20130516115948 = 4083
となっているためです。
この結果は誰も求めていはいないはずです。

時間の差分を求める場合には、必ずtimediff関数を使用しましょう。

mysql> select timediff(end,start) from test;
+---------------------+
| timediff(end,start) |
+---------------------+
| 00:00:43            |
+---------------------+
1 row in set (0.01 sec)

さらに時間を秒に直したい場合には、time_to_secを使用しましょう。

mysql> select time_to_sec(timediff(end,start)) from test;
+----------------------------------+
| time_to_sec(timediff(end,start)) |
+----------------------------------+
|                               43 |
+----------------------------------+
1 row in set (0.00 sec)

timediffを使用しなければ、時間や日付をまたいだ場合に思わぬ結果になってしまいます!!

特定の時間を加減算する

列同士の比較にはtimediff関数でしたが、
指定した時間を加減算する場合にはaddtimeを使用します。

下記は10分前を求めている例です。

mysql> select now(),addtime(now(),'-00:10:00');
+---------------------+----------------------------+
| now()               | addtime(now(),'-00:10:00') |
+---------------------+----------------------------+
| 2013-05-17 06:13:49 | 2013-05-17 06:03:49        |
+---------------------+----------------------------+
1 row in set (0.00 sec)

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL

執筆者:

関連記事

mysql

MySQLの連続INSERTを高速にする

もししらなければ確実に、そして恐ろしく効果を発揮できると思います。 INSERTを連続実行する際にボトルネックとなるのはコミットです。 オートコミットをオフにするという手もあるのですが、 INSERT …

MySQLの実行速度テスト用PHP

1.testデータベースにtest_tableテーブルを作成。 2.1万件のデータを登録します。 3.1000件のフラグを更新 4.更新したデータを検索する時刻を測定して表示 するサンプルです。 &l …

mysql

MySQLのインポートエラー ERROR 1005 (HY000) (errno: 121)

ダンプをインポートする際にたまにるのがこのエラーです。 ERROR 1005 (HY000) at line 23: Can’t create table ‘./[スキーマ]/ …

mysql

MySQLのバイナリログを見てスレーブ停止の原因を調査する

以前スレーブ側の更新がとまっていることに気付きました :x001: その時のトラブルシューティングの手順です。 INDEX1 1.スレーブ側で、SlaveS tatusを確認する2 2.スレーブ側のロ …

mysql

vmwareをアップデートしたらMySQLが起動しなくなった

[root@centos100 log]# service mysql restart MySQL server PID file could not be found! [失敗] Starting …