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

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」が正しく算出されています。この方法を使えば、契約期間や経過月数の計算など、さまざまな場面で活用できます。

  1. MySQLで現在の日付とテーブル内の日付レコードの差を求める方法

    現在の日付とテーブルに保存された日付レコードの差(日数)を求めるには、MySQLの DATEDIFF() 関数を使用します。この関数は、2つの日付の差を日数で返してくれる便利な関数です。ここでは、実際にテーブルを作成し、データを挿入して、現在の日付との差を計算する手順を順番に見ていきましょう。1. テーブルの作成まず、日付型のカラムを持つテーブルを作成します。mysql> create table DemoTable1446-> (-> DueDate date-> );Query OK, 0 rows affected (1.42 sec)2. レコードの挿入次に、I

  2. 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