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

MySQLで今日から1週間(7日)間隔の日付を抽出する方法

MySQLで今日から1週間先の日付を抽出するには?

MySQLで今日の日付から1週間(7日)の間隔にある日付を抽出したい場合は、DATEDIFF関数を使うと便利です。DATEDIFFは2つの日付の差分(日数)を返す関数で、その結果が7の倍数になっているレコードを絞り込むことで、ちょうど1週間ごとの日付を取得できます。

まず、CURDATE()関数を使って現在の日付を確認しましょう。

mysql> select curdate();
+------------+
| curdate()  |
+------------+
| 2019-12-20 |
+------------+
1 row in set (0.00 sec)

現在の日付は「2019-12-20」です。次に、サンプル用のテーブルを作成します。

テーブルの作成

mysql> create table DemoTable1990
   (
   ShippingDate date
   );
Query OK, 0 rows affected (0.99 sec)

データの挿入

INSERT文を使って、いくつかのレコードをテーブルに追加します。

mysql> insert into DemoTable1990 values('2019-12-13');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1990 values('2019-12-21');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1990 values('2019-12-20');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1990 values('2019-12-24');
Query OK, 1 row affected (0.13 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1990;

実行すると、以下のような出力が得られます。

+--------------+
| ShippingDate |
+--------------+
| 2019-12-13   |
| 2019-12-21   |
| 2019-12-20   |
| 2019-12-24   |
+--------------+
4 rows in set (0.00 sec)

1週間間隔の日付を抽出するクエリ

ここで本題となるクエリです。DATEDIFF(curdate(), ShippingDate) の結果を7で割った余りが0になるレコードを抽出することで、今日からちょうど1週間(またはその倍数)離れた日付だけを取り出せます。

mysql> select * from DemoTable1990 where datediff(curdate(),ShippingDate)%7=0;

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

+--------------+
| ShippingDate |
+--------------+
| 2019-12-13   |
| 2019-12-20   |
+--------------+
2 rows in set (0.04 sec)

クエリの解説

このクエリでは、「2019-12-13」と「2019-12-20」の2件が抽出されました。基準日は「2019-12-20」なので、差分が0日の「2019-12-20」と、差分が7日(ちょうど1週間)の「2019-12-13」が該当します。一方、「2019-12-21」(差分-1日)や「2019-12-24」(差分-4日)は7の倍数ではないため除外されます。

なお、%7=0という条件は差分が7の倍数であればすべて該当するため、14日前や21日前などの日付も含まれる点に注意してください。厳密に「1週間以内のみ」を対象にしたい場合は、BETWEEN句などと組み合わせて範囲を限定するのがおすすめです。

  1. MySQLのSELECTクエリで別テーブルに存在しない行を抽出する方法(NATURAL LEFT JOIN活用)

    MySQLのSELECTクエリで別テーブルに存在しない行を抽出する方法データベースの運用では、「片方のテーブルには存在するが、もう片方のテーブルには存在しないレコード」を抽出したい場面がよくあります。この記事では、2つのテーブルを作成し、NATURAL LEFT JOINを活用して差分の行を取得する方法を、実際のサンプルコードとともにわかりやすく解説します。1. 最初のテーブルを作成するまずは比較元となる最初のテーブルを作成します。 mysql> create table FirstTableDemo -> ( -> id int, -> name v

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected