MySQLで2つの日付の差を月単位で求める方法
MySQLで2つの日付の差を「月」単位で計算したい場合、TIMESTAMPDIFF()関数を使うと簡単に求められます。さらにABS()関数を組み合わせることで、日付の順序に関係なく常に正の値(絶対値)として結果を取得できます。
本記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。
1. テーブルの作成
まず、date型のカラムを2つ持つテーブルを作成しましょう。
mysql> create table DemoTable
-> (
-> Date1 date,
-> Date2 date
-> );
Query OK, 0 rows affected (1.04 sec)
2. サンプルデータの挿入
INSERT文を使って、テーブルにレコードを追加します。
mysql> insert into DemoTable values('2017-01-10','2017-12-10');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2018-12-31','2015-01-02');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('2020-03-01','2019-06-15');
Query OK, 1 row affected (0.19 sec)3. 登録データの確認
SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
上記のクエリを実行すると、次のような出力が得られます。
+------------+------------+
| Date1 | Date2 |
+------------+------------+
| 2017-01-10 | 2017-12-10 |
| 2018-12-31 | 2015-01-02 |
| 2020-03-01 | 2019-06-15 |
+------------+------------+
3 rows in set (0.00 sec)
4. 月単位で日付の差を求めるクエリ
それでは、2つの日付の差を月数として取得するクエリを見てみましょう。
mysql> select abs(timestampdiff(MONTH,Date1,Date2)) from DemoTable;
実行結果は以下の通りです。
+---------------------------------------+
| abs(timestampdiff(MONTH,Date1,Date2)) |
+---------------------------------------+
| 11 |
| 47 |
| 8 |
+---------------------------------------+
3 rows in set (0.03 sec)
ポイント解説
TIMESTAMPDIFF(MONTH, Date1, Date2):第1引数に「MONTH」を指定することで、Date1からDate2までの差を月単位の整数値で返します。
ABS()関数:絶対値を返す関数です。TIMESTAMPDIFFは引数の日付順序によって負の値を返すことがありますが、ABSで包むことで、どちらの日付が先でも常に正の値が得られます。
たとえば、最初のレコードでは2017年1月10日と2017年12月10日の差として「11」、2番目のレコードでは約47か月の差として「47」が正しく算出されています。この方法を使えば、契約期間や経過月数の計算など、さまざまな場面で活用できます。
-
MySQLで現在の日付とテーブル内の日付レコードの差を求める方法
現在の日付とテーブルに保存された日付レコードの差(日数)を求めるには、MySQLの DATEDIFF() 関数を使用します。この関数は、2つの日付の差を日数で返してくれる便利な関数です。ここでは、実際にテーブルを作成し、データを挿入して、現在の日付との差を計算する手順を順番に見ていきましょう。1. テーブルの作成まず、日付型のカラムを持つテーブルを作成します。mysql> create table DemoTable1446-> (-> DueDate date-> );Query OK, 0 rows affected (1.42 sec)2. レコードの挿入次に、I
-
MySQLで2つの日時(DATETIME)値の差を求める方法
MySQLで2つの日時値の差を求める方法MySQLで2つのDATETIME型の値の差を求めるには、TIMESTAMPDIFF()関数を使用します。この関数を使うことで、秒・分・時間などの任意の単位で2つの日時の差を簡単に計算できます。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> DueDatetime1 datetime, -> DueDatetime2 datetime -> );Query OK, 0 rows affected (0.86 sec)次に、INSE