MySQLでDATETIME型を日付と時刻に分割して個別に比較する方法
はじめに
MySQLでは、DATETIME 型のカラムには「日付」と「時刻」が一緒に格納されています。場合によっては、この値を日付と時刻に分けて個別に扱いたいことがあります。そのようなときに便利なのが CAST() 関数です。この記事では、実際にテーブルを作成し、データを登録しながら、DATETIME列を日付と時刻に分割してそれぞれを比較する方法を解説します。
1. テーブルの作成
まず、DATETIME型のカラムを持つテーブルを作成します。
mysql> create table DemoTable805(LoginDate datetime);
Query OK, 0 rows affected (0.63 sec)
LoginDate というDATETIME型のカラムを持つテーブル DemoTable805 が作成されました。
2. レコードの挿入
次に、INSERTコマンドを使ってサンプルデータを登録します。
mysql> insert into DemoTable805 values('2019-01-31 12:45:20');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable805 values('2017-11-01 10:20:30');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable805 values('2016-03-12 04:10:00');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable805 values('2018-12-24 05:01:00');
Query OK, 1 row affected (0.13 sec)3. 登録したレコードの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable805;
実行結果は以下のとおりです。
+---------------------+
| LoginDate |
+---------------------+
| 2019-01-31 12:45:20 |
| 2017-11-01 10:20:30 |
| 2016-03-12 04:10:00 |
| 2018-12-24 05:01:00 |
+---------------------+
4 rows in set (0.00 sec)
日付と時刻がひとつの値として格納されていることがわかります。
4. DATETIME列を日付と時刻に分割する
DATETIME型の値を日付と時刻に分けるには、CAST() 関数を使用します。CAST(LoginDate AS DATE) で日付部分のみを、CAST(LoginDate AS TIME) で時刻部分のみを取り出せます。
mysql> select cast(LoginDate AS date),cast(LoginDate AS Time) from DemoTable805;
実行結果は以下のとおりです。
+-------------------------+-------------------------+
| cast(LoginDate AS date) | cast(LoginDate AS Time) |
+-------------------------+-------------------------+
| 2019-01-31 | 12:45:20 |
| 2017-11-01 | 10:20:30 |
| 2016-03-12 | 04:10:00 |
| 2018-12-24 | 05:01:00 |
+-------------------------+-------------------------+
4 rows in set (0.03 sec)
このように、DATETIME列から日付と時刻をそれぞれ独立した値として取得できました。
個別比較への応用
分割した値は、WHERE句などで個別の条件比較にも利用できます。例えば、特定の日付だけを抽出したい場合は次のように記述します。
mysql> select * from DemoTable805
-> where cast(LoginDate AS date) = '2019-01-31';
また、時刻だけで絞り込みたい場合は以下のようになります。
mysql> select * from DemoTable805
-> where cast(LoginDate AS time) > '10:00:00';
補足:DATE()関数・TIME()関数との違い
MySQLには CAST() 以外にも、DATE() 関数や TIME() 関数が用意されており、同様に日付・時刻の抽出が可能です。
mysql> select DATE(LoginDate), TIME(LoginDate) from DemoTable805;
どちらの方法でも結果はほぼ同じですが、標準SQLに準拠した書き方をしたい場合は CAST() を使うのがおすすめです。
まとめ
MySQLでDATETIME型のカラムを日付と時刻に分割するには、CAST(カラム名 AS DATE) および CAST(カラム名 AS TIME) を使用します。これにより、日付と時刻を個別に取得・比較できるようになり、「特定の日付にログインしたユーザー」や「特定の時間帯のアクセス」などを柔軟に検索できるようになります。ログ解析や集計処理などで非常に役立つテクニックなので、ぜひ活用してください。
-
Javaを使ってDATE型の値をMySQLカラムに挿入する方法【PreparedStatement活用】
はじめに JavaからMySQLのDATE型カラムに日付データを挿入したい場合、PreparedStatementを使用するのが最も安全で推奨される方法です。SQLインジェクション対策にもなり、日付型の変換もスムーズに行えます。 本記事では、Javaプログラムから現在の日付をMySQLテーブルに挿入する手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルの作成 まず、DATE型のカラム「ArrivalDate」を含むテーブルを作成します。以下はMySQLでの作成例です。 mysql> create table DemoTable( PassengerId
-
Windows 11で日付と時刻を変更・設定する方法【初心者向けガイド】
Windowsパソコンの日付と時刻は、通常インターネットに接続した時点で自動的に設定されます。ただし、必要に応じてこれらの設定を手動で変更することも可能です。この記事では、Windows 11で日付と時刻を変更するための手順をわかりやすく解説していきます。 Windows 11で日付と時刻を変更する方法 Windows 11で日付と時刻を変更するには、Windowsの「設定」アプリを使用します。まず、スタートメニューの検索バーに「設定」と入力し、表示された最適な結果を選択しましょう。あるいは、キーボードショートカットのWin + Iキーでも設定アプリを開くことができます。 設定アプリを開いたら