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

MySQLでテーブルを作成しTIMESTAMPDIFF()関数を実装する方法

TIMESTAMPDIFF()関数とは

MySQLのTIMESTAMPDIFF()は、2つの日付や日時(datetime)式の差を計算するための関数です。「SECOND」や「MINUTE」などの単位を指定することで、その単位における差分を整数値として取得できます。

本記事では、実際にテーブルを作成しながら、TIMESTAMPDIFF()を使って出勤時間と退勤時間の差(秒数)を自動計算する方法を解説します。

1. テーブルの作成

まず、勤怠データを格納するテーブルを作成します。「PunchInTime(出勤時刻)」と「PunchOutTime(退勤時刻)」のdatetime型カラムに加え、TIMESTAMPDIFF()ABS()を組み合わせた生成カラム「Details」を定義するのがポイントです。

mysql> create table DemoTable665(
    PunchInTime datetime,
    PunchOutTime datetime,
    Details INT(11) AS (ABS(TIMESTAMPDIFF(second,PunchInTime,PunchOutTime)))
)ENGINE=MyISAM;
Query OK, 0 rows affected (0.23 sec)

ABS()を使用しているのは、時刻の前後関係に関係なく常に正の値(絶対値)で差分を取得できるようにするためです。

2. レコードの挿入

続いて、INSERTコマンドを使ってテーブルにレコードを挿入します。このとき、「Details」カラムには値を指定せず、出勤時刻と退勤時刻のみを挿入します。

mysql> insert into DemoTable665(PunchInTime,PunchOutTime) values('2019-09-21 9:30:10','2019-09-21 04:34:56');
Query OK, 1 row affected (0.05 sec)
mysql> insert into DemoTable665(PunchInTime,PunchOutTime) values('2019-11-11 10:00:20','2019-11-11 05:30:16');
Query OK, 1 row affected (0.04 sec)

3. レコードの表示

SELECT文を実行して、テーブル内のすべてのレコードを確認しましょう。

mysql> select *from DemoTable665;

上記のクエリを実行すると、次のような結果が出力されます。

+---------------------+---------------------+---------+
| PunchInTime         | PunchOutTime        | Details |
+---------------------+---------------------+---------+
| 2019-09-21 09:30:10 | 2019-09-21 04:34:56 | 17714   |
| 2019-11-11 10:00:20 | 2019-11-11 05:30:16 | 16204   |
+---------------------+---------------------+---------+
2 rows in set (0.00 sec)

実行結果のポイント

出力結果を見ると、「Details」カラムに出勤時刻と退勤時刻の差が秒単位で自動的に計算されて格納されていることがわかります。

  • 1行目:17,714秒(約4時間55分)の差
  • 2行目:16,204秒(約4時間30分)の差

このように生成カラムを活用すれば、INSERT時に明示的に値を指定しなくても、TIMESTAMPDIFF()による日時の差分計算を自動化できます。勤怠管理システムなどで勤務時間を算出したい場合に非常に便利な手法です。

  1. MySQLでインデックス付きのテーブルを作成する方法を徹底解説

    MySQLでは、テーブル作成後にCREATE INDEX文を使うことで、特定のカラムに対してインデックスを追加できます。検索速度の向上やデータ整合性の確保において、インデックスは非常に重要な役割を果たします。この記事では、基本的な構文から実際の実行例まで、順を追ってわかりやすく解説します。インデックス付きテーブルを作成する基本構文まずテーブルを作成し、その後CREATE INDEX文でインデックスを追加します。基本の構文は以下のとおりです。create table yourTableName ( yourColumnName1 dataType, yourColumnName2 dataTyp

  2. MySQLでDOUBLE型の桁数(長さ)を実装・設定する方法

    MySQLでDOUBLE型のカラムを作成する場合、以下のような構文を使用します。create table yourTableName ( yourColumnName double(5,2) unsigned );DOUBLE型の構文についてdouble(5,2) の「5」は整数部と小数部を合わせた全体の桁数、「2」は小数点以下の桁数を表します。つまり、この設定では最大で 999.99 までの値を格納できます。さらに、unsigned を指定すると負の値が除外され、正の数値のみを扱うカラムになります。テーブルの作成まず、実際にテーブルを作成してみましょう。mysql> create ta