MySQLのSELECTで今日ログインしたユーザーを取得する方法
MySQLで今日ログインしたユーザーを抽出する方法
今日ログインしたユーザーを取得したい場合は、STR_TO_DATE()関数とCURDATE()関数を組み合わせて使用します。ここでは、日付フィールドが文字列型として保存されている場合を想定して解説します。
基本構文
select yourColumnName1,yourColumnName2,yourColumnName3,...N
from youTableName
WHERE STR_TO_DATE(yourColumnName1, 'フォーマット') = CURDATE();
ポイントは、STR_TO_DATE()で文字列型の日付を日付値に変換し、現在の日付のみを返すCURDATE()と比較する点です。
サンプルテーブルの準備
例として、ユーザーの氏名とログイン日付を保存する「DateEqualToday」テーブルを用意しました。
+------+------------+-----------+------------+
| Id | First_Name | Last_Name | LoginDate |
+------+------------+-----------+------------+
| 1 | James | Smith | 20-12-2018 |
| 2 | Carol | Taylor | 21-12-2017 |
| 3 | John | Smith | 21-12-2018 |
| 4 | Maria | Garcia | 22-12-2018 |
| 5 | Mike | Davis | 21-12-2018 |
| 6 | Bob | Wilson | 21-12-2018 |
+------+------------+-----------+------------+
6 rows in set (0.00 sec)
クエリの実行例
次のクエリでは、LoginDateを%d-%m-%Y形式で日付に変換し、CURDATE()の戻り値と比較することで、今日ログインしたユーザーだけを絞り込んでいます。
mysql> select Id,First_Name,LoginDate
-> from DateEqualToday WHERE STR_TO_DATE(LoginDate, '%d-%m-%Y') = CURDATE();
実行結果
+------+------------+------------+
| Id | First_Name | LoginDate |
+------+------------+------------+
| 3 | John | 21-12-2018 |
| 5 | Mike | 21-12-2018 |
| 6 | Bob | 21-12-2018 |
+------+------------+------------+
3 rows in set (0.00 sec)
実行結果から、ログイン日が本日(2018年12月21日)に該当するId 3、5、6の3件のレコードのみが抽出されていることが確認できます。
補足:DATE型・DATETIME型の場合
なお、日付カラムがDATE型やDATETIME型で保存されている場合は、STR_TO_DATE()による変換は不要です。WHERE LoginDate = CURDATE()のように直接比較できるため、よりシンプルに記述できます。文字列型の日付を扱う際にのみ、今回のような変換処理が必要になる点に注意しましょう。
-
MySQLのSELECT文で特定のカラム(列)のレコードを取得する方法
はじめにMySQLでSELECTクエリを実行する際、SELECT *を使うとすべてのカラムが取得されますが、カラム名を明示的に指定すれば、必要なカラム(列)のデータだけを効率的に取り出せます。この記事では、サンプルテーブルを作成しながら、特定のカラムのレコードを取得する手順を解説します。1. テーブルの作成まず、CREATE TABLE文でサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1837 ( StudentId int NOT NULL AU
-
MySQLで今日から1週間(7日)間隔の日付を抽出する方法
MySQLで今日から1週間先の日付を抽出するには?MySQLで今日の日付から1週間(7日)の間隔にある日付を抽出したい場合は、DATEDIFF関数を使うと便利です。DATEDIFFは2つの日付の差分(日数)を返す関数で、その結果が7の倍数になっているレコードを絞り込むことで、ちょうど1週間ごとの日付を取得できます。まず、CURDATE()関数を使って現在の日付を確認しましょう。mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-12-20 | +------------+ 1