MySQLのTIMESTAMP型フィールドで特定の日付を検索する方法【DATE()関数と範囲検索】
MySQLでタイムスタンプ(TIMESTAMP)フィールドから日付を検索する方法
MySQLでは、DATE()関数を使用することで、TIMESTAMP型のカラムから特定の日付を簡単に検索できます。TIMESTAMP型は「日付+時刻」という形式でデータが保存されるため、日付だけで比較する際には少し工夫が必要です。本記事では、サンプルテーブルを作成しながら、具体的な検索クエリの書き方を解説します。
1. サンプルテーブルの作成
まず、以下のSQLでテーブルを作成します。
mysql> create table DemoTable
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentAdmissionDate timestamp
);
Query OK, 0 rows affected (0.63 sec)このテーブルには、自動採番される主キー「StudentId」と、入学日時を格納するTIMESTAMP型カラム「StudentAdmissionDate」が定義されています。
2. テストデータの挿入
次に、INSERT文で複数のレコードを挿入します。
mysql> insert into DemoTable(StudentAdmissionDate) values('2011-01-12 12:34:43');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(StudentAdmissionDate) values('2012-10-23 11:32:21');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(StudentAdmissionDate) values('2001-02-14 05:12:01');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentAdmissionDate) values('2018-12-31 15:10:04');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(StudentAdmissionDate) values('2019-04-16 11:04:10');
Query OK, 1 row affected (0.81 sec)3. 登録された全レコードの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果:
+-----------+----------------------+ | StudentId | StudentAdmissionDate | +-----------+----------------------+ | 1 | 2011-01-12 12:34:43 | | 2 | 2012-10-23 11:32:21 | | 3 | 2001-02-14 05:12:01 | | 4 | 2018-12-31 15:10:04 | | 5 | 2019-04-16 11:04:10 | +-----------+----------------------+ 5 rows in set (0.00 sec)
4. DATE()関数で特定の日付を検索する
TIMESTAMP型のカラムには時刻情報も含まれているため、単純に「= '2001-02-14'」と比較してもヒットしません。そこでDATE()関数を使い、タイムスタンプから日付部分のみを抽出して比較します。
mysql> select *from DemoTable where date(StudentAdmissionDate)='2001-02-14';
実行結果:
+-----------+----------------------+ | StudentId | StudentAdmissionDate | +-----------+----------------------+ | 3 | 2001-02-14 05:12:01 | +-----------+----------------------+ 1 row in set (0.04 sec)
このように、時刻に関係なく「2001年2月14日」に該当するレコードだけを抽出できました。
5. 日付の範囲で検索する
比較演算子を組み合わせれば、特定の期間に含まれるデータを検索することも可能です。
mysql> select *from DemoTable where StudentAdmissionDate >='2012-01-01' and StudentAdmissionDate < '2019-12-01';
実行結果:
+-----------+----------------------+ | StudentId | StudentAdmissionDate | +-----------+----------------------+ | 2 | 2012-10-23 11:32:21 | | 4 | 2018-12-31 15:10:04 | | 5 | 2019-04-16 11:04:10 | +-----------+----------------------+ 3 rows in set (0.00 sec)
終了日の条件を「未満(<)」で指定すると、境界値の扱いが明確になり、意図しないデータの抜けや二重カウントを防げます。
まとめ
- 特定の日付で検索する場合:
WHERE DATE(カラム名) = 'YYYY-MM-DD' - 期間を指定して検索する場合:
WHERE カラム名 >= '開始日' AND カラム名 < '終了日'
なお、大量のデータを扱う場合は注意が必要です。DATE()関数をカラムに対して適用すると、そのカラムに張られたインデックスが利用されなくなり、クエリが遅くなることがあります。パフォーマンスを重視する場面では、上記のような範囲検索の形式を採用するのがおすすめです。
-
MySQLでテーブル内の^(キャレット)文字を検索する方法
MySQLで^文字を検索するには?MySQLのテーブルやカラム名に含まれる^(キャレット)文字を検索したい場合は、LIKE演算子を使用します。特に、information_schemaデータベースのcolumnsテーブルを参照することで、データベース全体から^を含むカラム名を効率的に特定できます。基本の検索構文以下の構文を使用して、^文字を含むカラムを検索できます。select table_schema, table_name, column_namefrom information_schema.columnswhere column_name like %^%;このクエリは、スキーマ名(t
-
MySQLでカラム内の値を検索するには?REGEXP_INSTR関数の使い方
MySQLでカラム内の値を検索する方法MySQLでは、REGEXP_INSTR()関数を使うことで、指定したカラムに特定の文字列が含まれているかどうかを正規表現ベースで判定できます。マッチした場合は「1」、マッチしなかった場合は「0」を返すため、WHERE句と組み合わせることで柔軟な部分一致検索が可能になります。基本構文構文は以下の通りです。select *from yourTableName where REGEXP_INSTR(yourColumnName,yourSearchValue);サンプルテーブルの作成上記の構文を理解するために、まずテーブルを作成しましょう。mysql>