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です。
-
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」を持つ
-
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」