異なる列にある2つの日付間の日数を計算するMySQLクエリ
MySQLでは、DATEDIFF()関数を使うことで、同じテーブル内の異なる列に格納された2つの日付の差(日数)を簡単に計算できます。ここでは、社員の入社日と退職日から勤務日数を求める例を紹介します。
1. テーブルを作成する
まず、2つの日付型の列を持つテーブルを作成します。
mysql> create table DemoTable1471
-> (
-> EmployeeJoiningDate date,
-> EmployeeRelievingDate date
-> );
Query OK, 0 rows affected (0.57 sec)
2. レコードを挿入する
INSERTコマンドを使って、サンプルデータを登録します。
mysql> insert into DemoTable1471 values('2018-06-21','2018-12-21');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1471 values('2017-01-19','2019-01-31');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1471 values('2015-12-31','2016-03-01');
Query OK, 1 row affected (0.11 sec)3. テーブルの内容を確認する
SELECT文ですべてのレコードを表示します。
mysql> select * from DemoTable1471;
実行結果は以下のとおりです。
+---------------------+-----------------------+
| EmployeeJoiningDate | EmployeeRelievingDate |
+---------------------+-----------------------+
| 2018-06-21 | 2018-12-21 |
| 2017-01-19 | 2019-01-31 |
| 2015-12-31 | 2016-03-01 |
+---------------------+-----------------------+
3 rows in set (0.00 sec)
4. 2つの日付間の日数を計算する
次のクエリを実行すると、DATEDIFF()関数によって退職日から入社日を引いた日数(勤務日数)を取得できます。
mysql> select datediff(EmployeeRelievingDate,EmployeeJoiningDate) as EmployeeWorkDays from DemoTable1471;
実行結果は以下のとおりです。
+------------------+
| EmployeeWorkDays |
+------------------+
| 183 |
| 742 |
| 61 |
+------------------+
3 rows in set (0.00 sec)
DATEDIFF()関数のポイント
DATEDIFF(終了日, 開始日) の形式で指定し、「終了日 − 開始日」の日数が返されます。引数の順序を逆にすると負の値になるため、注意が必要です。このように、同一テーブル内の別々の列に保存された日付同士を比較する場合でも、DATEDIFF()を使えば1行もしくは複数行まとめて簡単に日数差を算出できます。
-
MySQLで指定した2つの日付の間にあるレコードの合計値を取得する方法
はじめにMySQLで特定の2つの日付の間に存在するレコードの数値合計を求めたい場合は、BETWEENキーワードを使用します。BETWEEN句は、指定した範囲(開始日と終了日を含む)に該当するレコードを抽出できる便利な演算子です。この記事では、実際にテーブルを作成し、日付の範囲を指定して合計値を取得する手順を解説します。1. テーブルの作成まず、サンプル用のテーブルを作成します。ここでは「Value(数値)」と「PurchaseDate(購入日時)」というカラムを持つテーブルを定義します。mysql> create table DemoTable1444 -> ( -> V
-
MySQLで2つの列の組み合わせごとの出現回数を集計する方法
MySQLでは、GROUP BY句とGREATEST()・LEAST()関数を組み合わせることで、2つの列にまたがる値の組み合わせごとの出現回数を簡単に集計できます。この記事では、具体的なサンプルを使って手順を解説します。1. サンプルテーブルを作成するまず、2つの名前列を持つテーブルを作成します。mysql> create table DemoTable -> ( -> Name1 varchar(20), -> Name2 varchar(20) -> );Query OK, 0 rows affected (0.61 sec)2. テ