MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【MySQL】TIMEDIFF()の結果を秒に変換するクエリの書き方

MySQLで2つの時刻の差分を求める TIMEDIFF() 関数の結果は「HH:MM:SS」形式で返されますが、計算処理などに使う場合は秒単位に変換したほうが便利なことがあります。

そのような場合には、TIME_TO_SEC() 関数を組み合わせることで簡単に実現できます。ここでは、実際にテーブルを作成しながら手順を確認していきましょう。

1. サンプルテーブルの作成

まず、時刻データを格納するためのテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> SourceTime time,
    -> DestinationTime time
    -> );
Query OK, 0 rows affected (1.33 sec)

TIME型のカラムを2つ持つシンプルなテーブルです。「出発時刻(SourceTime)」と「到着時刻(DestinationTime)」のようなイメージで使えます。

2. テストデータの挿入

続いて、INSERT文を使ってサンプルレコードを追加します。

mysql> insert into DemoTable values('10:20:00','4:50:54');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable values('12:05:10','7:45:12');
Query OK, 1 row affected (0.30 sec)

SELECT文ですべてのレコードを確認してみましょう。

mysql> select *from DemoTable;

出力結果

+------------+-----------------+
| SourceTime | DestinationTime |
+------------+-----------------+
| 10:20:00   | 04:50:54        |
| 12:05:10   | 07:45:12       |
+------------+-----------------+
2 rows in set (0.00 sec)

3. 時間差を秒に変換するクエリ

それでは本題の、時刻の差分を秒に変換するクエリです。TIMEDIFF() の結果を TIME_TO_SEC() に渡し、さらに ABS() で絶対値にすることで、引数の順序に関係なく常に正の値を取得できます。

mysql> SELECT ABS(TIME_TO_SEC(timediff(DestinationTime, SourceTime))) from DemoTable;

出力結果

+---------------------------------------------------------+
| ABS(TIME_TO_SEC(timediff(DestinationTime, SourceTime))) |
+---------------------------------------------------------+
| 19746                                                        |
| 15598                                                        |
+---------------------------------------------------------+
2 rows in set (0.00 sec)

解説

  • TIMEDIFF(DestinationTime, SourceTime):2つの時刻の差分を「HH:MM:SS」形式で返します。
  • TIME_TO_SEC():「HH:MM:SS」形式の時刻値を総秒数に変換します。例えば「05:29:06」は19746秒になります。
  • ABS():差分が負の値になった場合も正の値として扱えるようにします。

このように、TIMEDIFF()TIME_TO_SEC() を組み合わせれば、時刻の差分を秒単位で簡単に取得できます。所要時間の集計や条件判定など、さまざまな場面で活用できるので、ぜひ覚えておきましょう。

  1. MySQLで秒を含まない形式の時間を抽出する方法

    TIME_FORMAT関数を使って秒を除外した時間を抽出する MySQLで時間データから秒を取り除き、「時:分」の形式だけを抽出したい場合は、TIME_FORMAT() 関数を使用します。まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable1326 -> ( -> Arrivaltime time -> ); Query OK, 0 rows affected (0.50 sec) 次に、INSERTコマンドを使ってテーブルにレコードを挿入します。 mysql> insert into D

  2. MySQLでタイムスタンプを月に変換するクエリの書き方

    タイムスタンプを月に変換する基本構文MySQLでタイムスタンプ(UNIXタイムスタンプ)を月に変換するには、FROM_UNIXTIME()関数とMONTH()関数を組み合わせて使用します。基本的な構文は以下の通りです。select month(from_unixtime(yourColumnName)) from yourTableName;FROM_UNIXTIME()関数がUNIXタイムスタンプを日時形式に変換し、その結果に対してMONTH()関数を適用することで、月の数値(1〜12)を取得できます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> cr