MySQLで時間を秒に変換して合計する方法【TIME_TO_SEC活用術】
MySQLで時間データを扱う際、複数の時間を単純にSUM()で合計すると、正しい結果が得られないことがあります。そんなときに役立つのが、TIME_TO_SEC()関数とSEC_TO_TIME()関数の組み合わせです。
基本的な考え方はシンプルです。まずTIME_TO_SEC()で各時間を秒数に変換し、その合計値をSEC_TO_TIME()でもう一度「時:分:秒」形式に戻すことで、正確な合計時間を求められます。
手順1:サンプルテーブルを作成する
まず、時間型(TIME)のカラムを持つテーブルを作成しましょう。
mysql> create table DemoTable
-> (
-> ArrivalTime time
-> );
Query OK, 0 rows affected (0.63 sec)
手順2:レコードを挿入する
insertコマンドを使って、テーブルにレコードを追加していきます。
mysql> insert into DemoTable values('04:10:00');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('05:20:50');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('06:40:10');
Query OK, 1 row affected (0.18 sec)手順3:レコードを確認する
select文で、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
出力結果
+-------------+
| ArrivalTime |
+-------------+
| 04:10:00 |
| 05:20:50 |
| 06:40:10 |
+-------------+
3 rows in set (0.00 sec)
時間の合計を計算するクエリ
以下が、MySQLで時間の合計を計算するためのクエリです。TIME_TO_SEC()で各レコードの時間を秒に変換し、SUM()で合計した後、SEC_TO_TIME()によって再び時間形式へ変換しています。
mysql> select SEC_TO_TIME( SUM( TIME_TO_SEC( ArrivalTime) ) ) from DemoTable;
出力結果
+-------------------------------------------------+
| SEC_TO_TIME( SUM( TIME_TO_SEC( ArrivalTime) ) ) |
+-------------------------------------------------+
| 16:11:00 |
+-------------------------------------------------+
1 row in set (0.00 sec)
まとめ
このように、TIME_TO_SEC()とSEC_TO_TIME()を組み合わせることで、時間データの合計を簡単かつ正確に求めることができます。勤怠管理や作業時間の集計など、時間の加算が必要な場面でぜひ活用してください。
-
MySQLでvarchar型の時刻データを正しい時間形式に変換する方法
varchar型として保存された「1620」や「2345」のような時刻データを、実際の時間形式(例:04:20)に変換したい場合、MySQLのTIME_FORMAT()関数を使用することで実現できます。この記事では、SUBSTRING()とCONCAT()を組み合わせて、4桁の文字列を「時:分」の形式に整形する手順を解説します。1. サンプルテーブルの作成まず、到着時刻をvarchar型で格納するテーブルを作成します。mysql> create table DemoTable1591 -> ( -> ArrivalTime varchar(20) -&
-
MySQLで今月のレコードを合計する方法【SUM()とMONTH()関数の使い方】
MySQLで今月のレコードを合計する方法MySQLで今月のレコードを合計するには、SUM()関数とMONTH()関数を組み合わせて使用します。ここでは、サンプルテーブルを作成し、実際にデータを集計する手順を順番に解説します。1. テーブルを作成するまず、日付と金額を格納するテーブルを作成しましょう。mysql> create table DemoTable1889 ( DueDate date, Amount int