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

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型の値が必要になった場合などに、非常に便利なテクニックなので、ぜひ覚えておきましょう。

  1. 【PHP】MySQLのDATETIME型から日付だけを抽出して変数に代入する方法

    MySQLのDATETIME型フィールド(例:2018-02-13 13:10:15)から「日付だけ」を取り出したい場合、PHPではDateTimeクラスを使うのが最もシンプルで確実な方法です。SQL側でDATE_FORMAT()を使う方法もありますが、PHP側で柔軟にフォーマットを制御できるDateTimeクラスの利用がおすすめです。DateTime::createFromFormat() の基本構文DateTimeクラスの静的メソッド createFromFormat() を使うと、指定した形式の日時文字列からDateTimeオブジェクトを生成できます。その後、format() メソッドで

  2. 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