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

MySQLで特定の曜日に該当する行を選択する方法【DAYOFWEEK関数の使い方】

MySQLで特定の曜日に該当する行を抽出したい場合は、DAYOFWEEK()関数を使用します。この関数は、引数に渡した日付が何曜日かに応じて1〜7の数値を返します。

DAYOFWEEK()関数の戻り値

DAYOFWEEK()関数は、曜日に応じて以下の値を返します。

  • 1:日曜日(Sunday)
  • 2:月曜日(Monday)
  • 3:火曜日(Tuesday)
  • 4:水曜日(Wednesday)
  • 5:木曜日(Thursday)
  • 6:金曜日(Friday)
  • 7:土曜日(Saturday)

なお、ODBC標準に基づく仕様のため、「1=日曜日」から始まる点に注意してください。

サンプルテーブルの作成

まず、テーブルを作成します。

mysql> create table DemoTable785 (
   CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   CustomerName varchar(100),
   ShoppingDate date
);
Query OK, 0 rows affected (0.61 sec)

レコードの挿入

insertコマンドを使って、テーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable785(CustomerName,ShoppingDate) values('Chris','2019-07-03');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable785(CustomerName,ShoppingDate) values('Robert','2019-07-01');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable785(CustomerName,ShoppingDate) values('David','2019-07-06');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable785(CustomerName,ShoppingDate) values('Carol','2019-07-19');
Query OK, 1 row affected (0.19 sec)

テーブルの内容を確認する

select文を使って、テーブル内のすべてのレコードを表示します。

mysql> select *from DemoTable785;

これにより、次のような結果が出力されます。

+------------+--------------+--------------+
| CustomerId | CustomerName | ShoppingDate |
+------------+--------------+--------------+
| 1          | Chris        | 2019-07-03   |
| 2          | Robert       | 2019-07-01   |
| 3          | David        | 2019-07-06   |
| 4          | Carol        | 2019-07-19   |
+------------+--------------+--------------+
4 rows in set (0.00 sec)

特定の曜日の行を抽出するクエリ

以下は、特定の曜日に該当する行だけを選択するクエリの例です。ここでは「DAYOFWEEK(ShoppingDate)=2」、つまり月曜日に該当する行を取得しています。

mysql> select *from DemoTable785 where DAYOFWEEK(ShoppingDate)=2;

実行すると、次のような結果が出力されます。

+------------+--------------+--------------+
| CustomerId | CustomerName | ShoppingDate |
+------------+--------------+--------------+
| 2          | Robert       | 2019-07-01   |
+------------+--------------+--------------+
1 row in set (0.00 sec)

2019年7月1日は月曜日であるため、該当する1件のレコードのみが抽出されました。このように、WHERE句の中でDAYOFWEEK()関数を使うことで、曜日を条件とした柔軟なデータ検索が可能になります。

補足:WEEKDAY()関数との違い

MySQLには、曜日を数値で返す関数としてWEEKDAY()もあります。こちらは「0=月曜日」始まりで、0〜6の値を返すという違いがあります。SQL Serverなどの他のデータベースや、週の開始日を月曜日とする仕組みと合わせやすいので、用途に応じて使い分けるとよいでしょう。

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

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

  2. MySQLのCONCAT_WS()関数で文字列を連結しながら条件に一致する行を抽出する方法

    MySQLのCONCAT_WS()関数とはMySQLでは、CONCAT_WS()関数を使用することで、複数のカラムや値を指定した区切り文字で連結できます。さらにWHERE句と組み合わせれば、条件に一致する行だけを抽出しながら、読みやすい形式の文字列として出力することも可能です。この記事では、実際にテーブルを作成し、CONCAT_WS()と条件指定を組み合わせたクエリの実行例を順番に解説します。サンプルテーブルの作成まず、ユーザー情報を格納するテーブル「demo38」を作成しましょう。mysql> create table demo38-> (-> user_id int,-&