MySQLでDateTime型のカラムを時刻を無視して日付のみで比較する方法
DateTime型を日付のみで比較する基本
MySQLにおいて、DateTime型のカラムを時刻部分を無視して日付だけで比較したい場合は、Date()関数を使用します。この関数はDateTime型の値から日付部分だけを抽出してくれるため、時刻に関係なく特定の日付のレコードを取得できます。
基本的な構文は以下の通りです。「yourDateValue」の部分には、比較対象となる日付を「YYYY-MM-DD」形式で指定してください。
select *from yourTableName where Date(yourColumnName)='yourDateValue';
サンプルテーブルの作成
まず、動作を確認するためのテーブルを作成しましょう。ここでは、到着時刻を格納する「ArrivalTime」というdatetime型カラムを持つテーブルを定義します。
mysql> create table DemoTable
(
ArrivalTime datetime
);
Query OK, 0 rows affected (0.74 sec)レコードの挿入
次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。それぞれ異なる日付と時刻を持つデータを4件登録します。
mysql> insert into DemoTable values('2019-01-31 02:34:56');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('2019-04-09 18:20:58');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-05-11 19:45:23');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-02-03 21:10:02');
Query OK, 1 row affected (0.16 sec)登録データの確認
SELECT文を実行して、テーブルに登録されたレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果には、日付と時刻の両方が含まれたレコードが表示されます。
+---------------------+ | ArrivalTime | +---------------------+ | 2019-01-31 02:34:56 | | 2019-04-09 18:20:58 | | 2019-05-11 19:45:23 | | 2019-02-03 21:10:02 | +---------------------+ 4 rows in set (0.00 sec)
Date()関数を使った日付のみの比較
それでは本題の時刻を無視した日付比較です。WHERE句の中でDate(ArrivalTime)と記述することで、時刻部分を切り捨てた日付同士を比較できます。例として、「2019-04-09」のレコードを検索してみます。
mysql> select *from DemoTable where Date(ArrivalTime)='2019-04-09';
実行結果を見ると、時刻が「18:20:58」であっても、日付が一致しているため該当レコードが正しく取得できています。
+---------------------+ | ArrivalTime | +---------------------+ | 2019-04-09 18:20:58 | +---------------------+ 1 row in set (0.00 sec)
補足:パフォーマンスに関する注意点
Date()関数をカラムに適用するとインデックスが利用できなくなる場合があるため、大量のデータを扱うテーブルでは注意が必要です。そのようなケースでは、範囲指定による検討をおすすめします。例えば、次のように書くことでインデックスを活用しつつ同じ結果が得られます。
select *from DemoTable where ArrivalTime >= '2019-04-09 00:00:00' and ArrivalTime < '2019-04-10 00:00:00';
状況に応じてDate()関数と範囲検索を使い分けることで、可読性とパフォーマンスのバランスを取ることができます。
-
JavaでMySQLテーブルに1つのカラムのみを挿入する方法
JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m
-
MySQLでDATETIME型の列に時間を追加する方法|ADDTIME()関数の使い方を解説
DATETIME型の値に時間を加算したい場合、MySQLではADDTIME()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、ADDTIME()関数で時間を追加する手順をわかりやすく解説します。1. テーブルを作成するまず、DATETIME型の列を持つテーブルを作成します。mysql> create table DemoTable1848 ( ShippingDate datetime ); Query OK, 0 rows affected (0.00 sec)2. サンプルデータを挿入する次に、INSERT文を使って