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

MySQLで現在の日時から30日前を計算する方法|DATE_SUB()関数の使い方

MySQLで現在の日時から30日を引いた値(30日前の日時)を取得するには、まず現在の日時を取得し、その値に対して減算処理を行う必要があります。現在の日時は、MySQLのNOW()関数で簡単に取得できます。

そして、日付の減算に使用するのがDATE_SUB()関数です。ここでは、現在の日時から30日を引くための構文と具体的な実行例を解説します。

基本構文

現在の日時から30日を引く構文は以下のとおりです。

DATE_SUB(NOW(),INTERVAL 30 DAY);

この構文では、まず現在の日時を計算し、その次のステップで30日分を差し引きます。まずは、現在の日時を取得するクエリを確認してみましょう。

mysql> select now();

実行結果は以下のとおりです。

+---------------------+
| now()               |
+---------------------+
| 2018-11-23 16:38:43 |
+---------------------+
1 row in set (0.00 sec)

DATE_SUB()で30日前の日時を取得する

それでは、DATE_SUB()関数を使って実際に30日を引いてみます。クエリは以下のとおりです。

mysql> select date_sub(now(),interval 30 day);

実行すると、30日前の日時が表示されます。

+---------------------------------+
| date_sub(now(),interval 30 day) |
+---------------------------------+
| 2018-10-24 16:38:50             |
+---------------------------------+
1 row in set (0.00 sec)

日付のみを取得したい場合:CURDATE()を使う

上記の例では時刻も含まれた結果が返されますが、結果として「日付だけ」(時刻を除いた値)を取得したい場合は、NOW()の代わりにCURDATE()を使用します。CURDATE()は現在の日付のみを返す関数です。

クエリは以下のとおりです。

mysql> select date_sub(curdate(),interval 30 day);

実行結果は次のとおりです。

+-------------------------------------+
| date_sub(curdate(),interval 30 day) |
+-------------------------------------+
| 2018-10-24                          |
+-------------------------------------+
1 row in set (0.00 sec)

補足:INTERVAL演算子を使った別の書き方

DATE_SUB()関数を使わずに、算術演算とINTERVALを組み合わせることでも同じ結果が得られます。

mysql> select now() - interval 30 day;

どちらの書き方でも結果は同じですが、意図が明確になるDATE_SUB()を使う方法が一般的に推奨されています。なお、逆に30日後の日時を取得したい場合は、DATE_ADD(NOW(), INTERVAL 30 DAY)を使用すればOKです。

  1. MySQLでDATETIME型から日付のみを抽出する方法

    MySQLのDATETIME型カラムから日付部分だけを取り出したい場合、DATE_FORMAT()関数と書式指定子を組み合わせるのが便利です。使用する主な書式指定子は以下の通りです。%d … 日(01〜31)%m … 月(01〜12)%Y … 年(4桁)それでは、実際にサンプルテーブルを作成して確認してみましょう。1. テーブルの作成mysql> create table DemoTable ( AdmissionDate datetime ); Query OK, 0 rows affected (0.52 sec)DATETIME型のカラム「AdmissionDate」を持つ

  2. MySQLで現在の日付から1日以上の行を抽出する方法(INTERVALの使い方)

    現在の日時を基準に「1日前以降」のデータを取得したい場合は、MySQLのINTERVALを使うと簡単に実現できます。この記事では、サンプルテーブルを作成し、実際に条件に合う行を抽出するまでの手順を順番に解説します。 1. 現在の日付を確認する まず、CURDATE()関数で現在の日付を確認しておきましょう。 mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-11-29 | +------------+ 1 row in set (0.00 sec) 現在の日付は「2019-11-29」