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

MySQLでDATETIME型を数値に変換する方法|UNIX_TIMESTAMP関数の使い方を解説

MySQLで日時(DATETIME型)のデータを数値に変換したい場合は、UNIX_TIMESTAMP()関数を使用します。この関数は、指定した日時を「1970年1月1日 00:00:00(UTC)」からの経過秒数であるUnixタイムスタンプとして返します。

基本構文

DATETIMEを数値に変換する際の基本構文は以下の通りです。

SELECT UNIX_TIMESTAMP(yourColumnName) AS anyVariableName FROM yourTableName;

それでは、実際にどのように動作するのか、サンプルテーブルを作成して確認していきましょう。

サンプルテーブルの作成

まず、テスト用のテーブルを作成します。テーブル作成のクエリは以下の通りです。

mysql> CREATE TABLE DateTimeToNumberDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> releasedDate datetime,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.46 sec)

テストデータの挿入

次に、INSERT文を使って複数のレコードを挿入します。現在の日時を返す now() や当日の日付を返す curdate() のほか、任意の日付文字列もそのまま登録できます。

mysql> INSERT INTO DateTimeToNumberDemo(releasedDate) VALUES(now());
Query OK, 1 row affected (0.19 sec)

mysql> INSERT INTO DateTimeToNumberDemo(releasedDate) VALUES(curdate());
Query OK, 1 row affected (0.24 sec)

mysql> INSERT INTO DateTimeToNumberDemo(releasedDate) VALUES('1978-01-19');
Query OK, 1 row affected (0.55 sec)

mysql> INSERT INTO DateTimeToNumberDemo(releasedDate) VALUES('2016-09-13');
Query OK, 1 row affected (0.46 sec)

mysql> INSERT INTO DateTimeToNumberDemo(releasedDate) VALUES('2017-11-12');
Query OK, 1 row affected (0.22 sec)

mysql> INSERT INTO DateTimeToNumberDemo(releasedDate) VALUES('2018-12-09');
Query OK, 1 row affected (0.21 sec)

登録済みデータの確認

SELECT文ですべてのレコードを表示し、正しく登録されているかを確認します。

mysql> SELECT *FROM DateTimeToNumberDemo;

実行結果は以下の通りです。

+----+---------------------+
| Id | releasedDate |
+----+---------------------+
| 1 | 2019-01-12 21:20:57 |
| 2 | 2019-01-12 00:00:00 |
| 3 | 1978-01-19 00:00:00 |
| 4 | 2016-09-13 00:00:00 |
| 5 | 2017-11-12 00:00:00 |
| 6 | 2018-12-09 00:00:00 |
+----+---------------------+
6 rows in set (0.00 sec)

DATETIMEを数値に変換するクエリ

いよいよ、releasedDate 列の値を数値(Unixタイムスタンプ)へ変換します。使用するクエリは以下の通りです。

mysql> SELECT unix_timestamp(releasedDate) AS DateToNumber FROM DateTimeToNumberDemo;

実行結果は以下のようになります。

+--------------+
| DateToNumber |
+--------------+
| 1547308257 |
| 1547231400 |
| 253996200 |
| 1473705000 |
| 1510425000 |
| 1544293800 |
+--------------+
6 rows in set (0.00 sec)

このように、すべての日時データが秒単位の数値に変換されました。日時を数値として比較・ソート・計算したい場合などに非常に便利です。

補足:タイムゾーンと逆変換について

UNIX_TIMESTAMP() の戻り値は、MySQLセッションの time_zone 設定の影響を受ける点に注意してください。サーバーとアプリケーションでタイムゾーンが異なると、意図した値にならないことがあります。

また、逆に数値(Unixタイムスタンプ)から日時に戻したい場合は、FROM_UNIXTIME() 関数を使用します。

mysql> SELECT FROM_UNIXTIME(1547308257);
+---------------------------+
| FROM_UNIXTIME(1547308257) |
+---------------------------+
| 2019-01-12 21:20:57 |
+---------------------------+
  1. MySQLで日時を再フォーマットする方法|DATE_FORMAT関数の使い方

    MySQLで日時(datetime)の表示形式を変更したい場合は、DATE_FORMAT() 関数を使用します。MySQLはデフォルトで「yyyy-mm-dd」形式の日時を返しますが、この関数を使えば任意の形式に自由に変換できます。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1558    -> (    -> EmployeeJoiningDate datetime    -> );Qu

  2. MySQLで日付形式を変換する方法|STR_TO_DATE()関数の使い方を解説

    MySQLでは、VARCHAR型などで保存された文字列の日付データを、正しい日付・時刻形式に変換したいケースがよくあります。そんなときに活躍するのが STR_TO_DATE() 関数です。この記事では、実際のSQL例とともに具体的な使い方を解説します。サンプルテーブルの作成まず、日付を文字列として格納するテーブルを作成します。mysql> create table DemoTable2010 ( DueDate varchar(20) ); Query OK, 0 rows affected (0.68 sec)テストデータの挿入INSERT文を使って、「日/月/年 時:分:秒」