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()など現在日時を返す関数を組み合わせることで、現在の年・月・日に基づいたレコードのフィルタリングを簡単に実現できます。ログ分析やアクセス履歴の集計など、実務でも頻繁に使われるテクニックなので、ぜひ活用してみてください。
-
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
-
MySQLで今月のレコードを合計する方法【SUM()とMONTH()関数の使い方】
MySQLで今月のレコードを合計する方法MySQLで今月のレコードを合計するには、SUM()関数とMONTH()関数を組み合わせて使用します。ここでは、サンプルテーブルを作成し、実際にデータを集計する手順を順番に解説します。1. テーブルを作成するまず、日付と金額を格納するテーブルを作成しましょう。mysql> create table DemoTable1889 ( DueDate date, Amount int