MySQLでDATE型とTIME型を結合してDATETIME型の値を取得する方法
MySQLでは、CONCAT()関数を使うことで、DATE型(日付)フィールドとTIME型(時刻)フィールドを1つに連結し、DATETIME型の値として取得・保存することができます。
この記事では、実際にテーブルを作成しながら、その手順をわかりやすく解説します。
デモ用テーブルの作成
まず、出荷日(ShippingDate)、出荷時刻(ShippingTime)、そして結果を格納するための出荷日時(Shippingdatetime)の3つのカラムを持つテーブルを作成します。
mysql> create table getDateTimeFieldsDemo
-> (
-> ShippingDate date,
-> ShippingTime time,
-> Shippingdatetime datetime
-> );
Query OK, 0 rows affected (0.50 sec)
サンプルデータの挿入
次に、INSERT文を使ってテーブルにレコードを挿入します。ここでは、日付と時刻のみを登録し、DATETIME型のカラムは空(NULL)のままにしておきます。
mysql> insert into getDateTimeFieldsDemo(ShippingDate,ShippingTime) values('2018-01-21','09:45:34');
Query OK, 1 row affected (0.16 sec)
mysql> insert into getDateTimeFieldsDemo(ShippingDate,ShippingTime) values('2013-07-26','13:21:20');
Query OK, 1 row affected (0.13 sec)
mysql> insert into getDateTimeFieldsDemo(ShippingDate,ShippingTime) values('2017-12-31','15:31:40');
Query OK, 1 row affected (0.17 sec)
mysql> insert into getDateTimeFieldsDemo(ShippingDate,ShippingTime) values('2019-03-07','12:13:34');
Query OK, 1 row affected (0.41 sec)登録データの確認
SELECT文でテーブル内の全レコードを表示してみましょう。
mysql> select *from getDateTimeFieldsDemo;
実行結果は以下の通りです。ShippingdatetimeカラムにはまだNULLが入っています。
+--------------+--------------+------------------+
| ShippingDate | ShippingTime | Shippingdatetime |
+--------------+--------------+------------------+
| 2018-01-21 | 09:45:34 | NULL |
| 2013-07-26 | 13:21:20 | NULL |
| 2017-12-31 | 15:31:40 | NULL |
| 2019-03-07 | 12:13:34 | NULL |
+--------------+--------------+------------------+
4 rows in set (0.00 sec)
CONCAT()関数でDATE型とTIME型を結合する
ここからが本題です。UPDATE文とCONCAT()関数を組み合わせることで、日付フィールドと時刻フィールドをスペース区切りで連結し、DATETIME型のカラムに格納できます。
mysql> update getDateTimeFieldsDemo set Shippingdatetime=concat(ShippingDate," ",ShippingTime);
Query OK, 4 rows affected (0.09 sec)
Rows matched: 4 Changed: 4 Warnings: 0
更新後のデータ確認
もう一度SELECT文を実行して、テーブルの内容を確認してみましょう。
mysql> select *from getDateTimeFieldsDemo;
実行結果は以下の通りです。Shippingdatetimeカラムに「日付 時刻」形式のDATETIME値が正しく格納されていることがわかります。
+--------------+--------------+---------------------+
| ShippingDate | ShippingTime | Shippingdatetime |
+--------------+--------------+---------------------+
| 2018-01-21 | 09:45:34 | 2018-01-21 09:45:34 |
| 2013-07-26 | 13:21:20 | 2013-07-26 13:21:20 |
| 2017-12-31 | 15:31:40 | 2017-12-31 15:31:40 |
| 2019-03-07 | 12:13:34 | 2019-03-07 12:13:34 |
+--------------+--------------+---------------------+
4 rows in set (0.00 sec)
まとめ
このように、MySQLではCONCAT(日付カラム, " ", 時刻カラム)という形で、DATE型とTIME型の値を簡単に連結してDATETIME型として扱うことができます。日付と時刻を別々のカラムで管理している既存テーブルからDATETIME型の値が必要になった場合などに、非常に便利なテクニックなので、ぜひ覚えておきましょう。
-
【PHP】MySQLのDATETIME型から日付だけを抽出して変数に代入する方法
MySQLのDATETIME型フィールド(例:2018-02-13 13:10:15)から「日付だけ」を取り出したい場合、PHPではDateTimeクラスを使うのが最もシンプルで確実な方法です。SQL側でDATE_FORMAT()を使う方法もありますが、PHP側で柔軟にフォーマットを制御できるDateTimeクラスの利用がおすすめです。DateTime::createFromFormat() の基本構文DateTimeクラスの静的メソッド createFromFormat() を使うと、指定した形式の日時文字列からDateTimeオブジェクトを生成できます。その後、format() メソッドで
-
MySQLの1つのクエリで日付に1年と2日を追加する方法
MySQLで日付に1年と2日を同時に加算したい場合は、DATE_ADD関数とINTERVALを組み合わせます。DATE_ADD関数を入れ子(ネスト)にするのがポイントです。ここでは、実際にテーブルを作成してサンプルデータを操作しながら、手順を詳しく解説します。 1. サンプルテーブルを作成する まず、日付(DATE型)を格納するカラムを持つテーブルを作成します。 mysql> create table DemoTable1376 -> ( -> AdmissionDate date -> ); Query OK, 0 rows affected