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

MySQLで現在の年・月・日のレコードをフィルタリングする方法

ユーザーのログイン時刻を記録した「UserLoginTime」カラムを持つテーブルを想定してみましょう。このログイン時刻をもとに、現在の日・月・年(つまり現在日付)を基準にレコードを絞り込みたいケースはよくあります。本記事では、その具体的な手順をサンプルコードとともにわかりやすく解説します。

サンプルテーブルの作成

まず、ログイン情報を格納するためのテーブルを作成します。

mysql> create table userLoginInformation
    -> (
    -> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserName varchar(20),
    -> UserLoginTime datetime
    -> );
Query OK, 0 rows affected (0.79 sec)

テストデータの挿入

続いて、INSERT文を使ってテーブルにいくつかのレコードを挿入します。クエリは以下の通りです。

mysql> insert into userLoginInformation(UserName,UserLoginTime) values('John','2016-02-12');
Query OK, 1 row affected (0.18 sec)
mysql> insert into userLoginInformation(UserName,UserLoginTime) values('Carol','2019-01-31');
Query OK, 1 row affected (0.16 sec)
mysql> insert into userLoginInformation(UserName,UserLoginTime) values('Bob','2019-02-19');
Query OK, 1 row affected (0.12 sec)
mysql> insert into userLoginInformation(UserName,UserLoginTime) values('Sam','2018-02-19');
Query OK, 1 row affected (0.16 sec)
mysql> insert into userLoginInformation(UserName,UserLoginTime) values('Larry','2017-04-18');
Query OK, 1 row affected (0.18 sec)

登録済みレコードの確認

SELECT文ですべてのレコードを表示して、正しく登録されているか確認しましょう。

mysql> select *from userLoginInformation;

出力結果は以下の通りです。

+--------+----------+---------------------+
| UserId | UserName | UserLoginTime       |
+--------+----------+---------------------+
|      1 | John     | 2016-02-12 00:00:00 |
|      2 | Carol    | 2019-01-31 00:00:00 |
|      3 | Bob      | 2019-02-19 00:00:00 |
|      4 | Sam      | 2018-02-19 00:00:00 |
|      5 | Larry    | 2017-04-18 00:00:00 |
+--------+----------+---------------------+
5 rows in set (0.00 sec)

現在の年に該当するレコードを抽出する

YEAR()関数とNOW()関数を組み合わせることで、現在の年に該当するレコードだけを取り出せます。ここで使用しているNOW()は、現在の日時を取得するための関数です。

mysql> select *from userLoginInformation where YEAR(UserLoginTime)=YEAR(now());

出力結果は以下の通りです。2019年のレコード2件のみが抽出されました。

+--------+----------+---------------------+
| UserId | UserName | UserLoginTime       |
+--------+----------+---------------------+
|      2 | Carol    | 2019-01-31 00:00:00 |
|      3 | Bob      | 2019-02-19 00:00:00 |
+--------+----------+---------------------+
2 rows in set (0.00 sec)

現在の月・日に該当するレコードを抽出する

同じ考え方を応用すれば、現在の月や日で絞り込むことも簡単です。

現在の月のレコードを取得する

MONTH()関数とYEAR()関数を併用することで、「現在の年かつ現在の月」に一致するレコードのみを抽出できます。

mysql> select *from userLoginInformation
    -> where YEAR(UserLoginTime)=YEAR(now())
    ->   AND MONTH(UserLoginTime)=MONTH(now());

現在の日のレコードを取得する

当日のレコードだけを取得したい場合は、DATE()関数とCURDATE()関数を比較する方法がシンプルでおすすめです。

mysql> select *from userLoginInformation
    -> where DATE(UserLoginTime)=CURDATE();

まとめ

MySQLでは、YEAR()・MONTH()・DATE()といった日付関数と、NOW()やCURDATE()など現在日時を返す関数を組み合わせることで、現在の年・月・日に基づいたレコードのフィルタリングを簡単に実現できます。ログ分析やアクセス履歴の集計など、実務でも頻繁に使われるテクニックなので、ぜひ活用してみてください。

  1. PHPのdate_parse()関数でタイムスタンプから日・月・年を抽出する方法

    date_parse()関数でタイムスタンプを解析するPHPでタイムスタンプ(日時文字列)から日・月・年を抽出するには、date_parse() 関数を使用します。この関数は日時文字列を解析し、年・月・日・時・分・秒などの情報を連想配列として返してくれます。基本構文は以下の通りです。print_r(date_parse(anyTimeStampValue));サンプルコード具体的なタイムスタンプ値を解析するPHPコードは以下のようになります。$yourTimeStampValue="2019-02-04 12:56:50"; print_r(date_parse($your

  2. MySQLで今月のレコードを合計する方法【SUM()とMONTH()関数の使い方】

    MySQLで今月のレコードを合計する方法MySQLで今月のレコードを合計するには、SUM()関数とMONTH()関数を組み合わせて使用します。ここでは、サンプルテーブルを作成し、実際にデータを集計する手順を順番に解説します。1. テーブルを作成するまず、日付と金額を格納するテーブルを作成しましょう。mysql> create table DemoTable1889    (    DueDate date,    Amount int