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

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()のように直接比較できるため、よりシンプルに記述できます。文字列型の日付を扱う際にのみ、今回のような変換処理が必要になる点に注意しましょう。

  1. MySQLのSELECT文で特定のカラム(列)のレコードを取得する方法

    はじめにMySQLでSELECTクエリを実行する際、SELECT *を使うとすべてのカラムが取得されますが、カラム名を明示的に指定すれば、必要なカラム(列)のデータだけを効率的に取り出せます。この記事では、サンプルテーブルを作成しながら、特定のカラムのレコードを取得する手順を解説します。1. テーブルの作成まず、CREATE TABLE文でサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1837    (    StudentId int NOT NULL AU

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

    MySQLで今日から1週間先の日付を抽出するには?MySQLで今日の日付から1週間(7日)の間隔にある日付を抽出したい場合は、DATEDIFF関数を使うと便利です。DATEDIFFは2つの日付の差分(日数)を返す関数で、その結果が7の倍数になっているレコードを絞り込むことで、ちょうど1週間ごとの日付を取得できます。まず、CURDATE()関数を使って現在の日付を確認しましょう。mysql> select curdate(); +------------+ | curdate()  | +------------+ | 2019-12-20 | +------------+ 1