【MySQL】VARCHAR型・TIME型の時刻データを合計する方法
MySQLでは、TIME型やVARCHAR型として保存された時刻データを、そのままSUM()関数で合計することができません。そんなときに便利なのが、TIME_TO_SEC()関数とSEC_TO_TIME()関数を組み合わせる方法です。時刻を一度秒数に変換して合計し、その結果を再び時刻形式に戻すことで、正確な合計時間を求められます。
テーブルを作成する
まず、TIME型のカラムを持つテーブルを作成しましょう。
mysql> create table DemoTable1442
-> (
-> DueTime time
-> );
Query OK, 0 rows affected (0.56 sec)
レコードを挿入する
続いて、INSERT文を使ってテーブルに複数のレコードを追加します。
mysql> insert into DemoTable1442 values('00:08:00');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1442 values('00:04:00');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1442 values('12:55:00');
Query OK, 1 row affected (0.15 sec)
レコードを確認する
SELECT文で、テーブル内のすべてのレコードを表示してみます。
mysql> select * from DemoTable1442;
実行すると、次のような出力が得られます。
+----------+ | DueTime | +----------+ | 00:08:00 | | 00:04:00 | | 12:55:00 | +----------+ 3 rows in set (0.00 sec)
時刻データを合計するクエリ
MySQLでVARCHAR型またはTIME型の時刻データを合計するには、次のクエリを使用します。
mysql> select sec_to_time(sum(time_to_sec(DueTime) ) ) as TotalTime from DemoTable1442;
実行結果は以下のとおりです。
+-----------+ | TotalTime | +-----------+ | 13:07:00 | +-----------+ 1 row in set (0.03 sec)
クエリの仕組み
このクエリが機能する仕組みは、次の3ステップです。
1. TIME_TO_SEC():各時刻値を経過秒数に変換します(例:「00:08:00」→ 480秒)。
2. SUM():変換されたすべての秒数を合計します。
3. SEC_TO_TIME():合計された秒数を「HH:MM:SS」形式の時刻値に戻します。
なお、VARCHAR型で保存された時刻文字列(例:'00:08:00')の場合も、MySQLが自動的に時刻として解釈するため、同じクエリで問題なく合計を求められます。作業時間の集計や稼働時間の管理など、時間データを扱う場面でぜひ活用してください。
-
MySQLで現在の日付・時刻を挿入する方法を解説
MySQLで現在の日付や時刻をテーブルに挿入したい場合、NOW()関数を使用するのが最も簡単な方法です。この記事では、実際の例を通して具体的な手順をわかりやすく解説します。1. テーブルを作成するまず、日付・時刻を格納するためのテーブルを作成します。テーブルの作成にはCREATE TABLEコマンドを使用します。mysql> create table CurrentDateTime -> ( -> CurrentTime datetime -> ); Query OK, 0 rows affected (1.14 sec)ここでは「CurrentDateTime」という
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected