MySQLで日付と時刻のカラムを結合してタイムスタンプ(DATETIME)に変換する方法
MySQLでは、別々に保存された日付(DATE型)と時刻(TIME型)のカラムを、concat()関数で連結し、さらにcast()関数でDATETIME型にキャストすることで、1つのタイムスタンプとして扱えるようになります。
基本となる構文
日付カラムと時刻カラムを結合してタイムスタンプに変換するには、以下のような構文を使用します。
SELECT CAST(CONCAT(日付カラム名, ' ', 時刻カラム名) AS DATETIME) AS 任意の別名 FROM テーブル名;
この方法が有効なのは、日付と時刻が文字列形式で格納されている場合です。なお、CAST()で変換できるのはDATETIME型のみである点に注意してください。
サンプルテーブルを作成する
まず、動作を確認するためのテーブルを作成しましょう。テーブル作成のクエリは次のとおりです。
mysql> CREATE TABLE DateAndTimeToTimestamp
-> (
-> Duedate DATE,
-> DueTime TIME
-> );
Query OK, 0 rows affected (0.51 sec)レコードを挿入する
続いて、INSERT文を使ってテーブルにデータを登録します。ここではdate_add()とcurdate()を組み合わせて、現在の日付から相対的な日付を生成しています。
mysql> INSERT INTO DateAndTimeToTimestamp VALUES(DATE_ADD(CURDATE(), INTERVAL 2 DAY), '10:30:02'); Query OK, 1 row affected (0.34 sec) mysql> INSERT INTO DateAndTimeToTimestamp VALUES(DATE_ADD(CURDATE(), INTERVAL -2 DAY), '12:20:45'); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO DateAndTimeToTimestamp VALUES(DATE_ADD(CURDATE(), INTERVAL 1 DAY), '01:32:42'); Query OK, 1 row affected (0.21 sec) mysql> INSERT INTO DateAndTimeToTimestamp VALUES(DATE_ADD(CURDATE(), INTERVAL -1 DAY), '14:25:58'); Query OK, 1 row affected (0.30 sec)
登録したデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> SELECT * FROM DateAndTimeToTimestamp;
実行結果は以下のとおりです。
+------------+----------+ | Duedate | DueTime | +------------+----------+ | 2018-12-16 | 10:30:02 | | 2018-12-12 | 12:20:45 | | 2018-12-15 | 01:32:42 | | 2018-12-13 | 14:25:58 | +------------+----------+ 4 rows in set (0.00 sec)
日付と時刻を結合してタイムスタンプにする
それでは、日付カラムと時刻カラムを結合してタイムスタンプ形式の文字列を取得してみます。まずはCONCAT()だけを使ったシンプルな例です。
mysql> SELECT CONCAT(Duedate, ' ', DueTime) AS timestampDemo FROM DateAndTimeToTimestamp;
実行結果は以下のとおりです。
+---------------------+ | timestampDemo | +---------------------+ | 2018-12-16 10:30:02 | | 2018-12-12 12:20:45 | | 2018-12-15 01:32:42 | | 2018-12-13 14:25:58 | +---------------------+ 4 rows in set (0.00 sec)
このように、日付と時刻が「YYYY-MM-DD HH:MM:SS」形式の文字列として結合されました。この結果をそのままDATETIME型として比較や計算に使いたい場合は、冒頭で紹介したようにCAST(... AS DATETIME)で囲むことで、正式な日時データとして扱うことができます。
-
MySQLで日付型カラムにNULLを挿入する方法|ALTER TABLEによるカラム定義の変更手順
日付型(DATE)カラムにNULLを挿入したい場合、ALTER TABLE文とMODIFY句を使って、カラム定義をNULL許可に変更する必要があります。基本の構文alter table テーブル名 modify column カラム名 date NULL;既存のテーブル構造はそのままに、指定したカラムだけをNULLを許容する形へ変更できます。検証用テーブルを作成するまず、日付カラムをNOT NULLとして定義したテーブルを作成します。mysql> create table DemoTable ( ShippingDate date NOT NULL ); Query OK, 0
-
MySQLで日付とENUM型の両方を基準に並べ替えるクエリの書き方
MySQLで日付とENUM型の両方を基準に並べ替えるには? 日付(タイムスタンプ)とENUM型という異なる2つのカラムを組み合わせてレコードを並べ替えたい場合は、ORDER BY DATE()を活用することで簡単に実現できます。この記事では、サンプルテーブルの作成から並べ替えクエリの実行まで、手順を追ってわかりやすく解説します。 1. サンプルテーブルの作成 まず、DATE型の「JoiningDate」カラムと、ENUM型の「Status」カラムを持つテーブルを作成します。 mysql> create table DemoTable -&