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

MySQLでタイムスタンプ(UNIX時間)を日付文字列として取得する方法

MySQLでタイムスタンプを日付文字列に変換するには

MySQLでは、FROM_UNIXTIME() 関数を使うことで、UNIXタイムスタンプ(整数値)を読みやすい日付・時刻の文字列として取得できます。

基本構文

SELECT FROM_UNIXTIME(カラム名, '%Y-%m-%d %H:%i:%s') FROM テーブル名;

第2引数の日付フォーマット指定子は省略可能です。省略した場合は、セッションの日時形式で自動的に整形されます。主な書式指定子は以下の通りです。

  • %Y:4桁の年(例:2019)
  • %m:2桁の月(01〜12)
  • %d:2桁の日(01〜31)
  • %H:24時間制の時(00〜23)
  • %i:分(00〜59)
  • %s:秒(00〜59)

動作確認用テーブルの作成

それでは、実際に動作を確認してみましょう。まず、サンプル用のテーブルを作成します。

mysql> CREATE TABLE select_timestampDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> ArrivalDateTime int
    -> );
Query OK, 0 rows affected (0.62 sec)

ここでのポイントは、ArrivalDateTime カラムを int 型として定義している点です。UNIXタイムスタンプは整数値で保存されるためです。

テストデータの挿入

次に、INSERT文を使っていくつかのレコードを挿入します。

mysql> INSERT INTO select_timestampDemo(ArrivalDateTime) VALUES(1546499730);
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO select_timestampDemo(ArrivalDateTime) VALUES(1546210820);
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO select_timestampDemo(ArrivalDateTime) VALUES(1496363157);
Query OK, 1 row affected (0.29 sec)

登録データの確認

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

mysql> SELECT * FROM select_timestampDemo;

実行結果:

+----+-----------------+
| Id | ArrivalDateTime |
+----+-----------------+
| 1  | 1546499730      |
| 2  | 1546210820      |
| 3  | 1496363157      |
+----+-----------------+
3 rows in set (0.00 sec)

このように、現状ではUNIXタイムスタンプが整数値のまま保存されていることがわかります。

FROM_UNIXTIMEで日付文字列に変換する

それでは本題の、タイムスタンプを「年-月-日 時:分:秒」形式の日付文字列として取得するクエリを実行します。

mysql> SELECT FROM_UNIXTIME(ArrivalDateTime, '%Y-%m-%d %H:%i:%s') FROM select_timestampDemo;

実行結果:

+-----------------------------------------------------+
| FROM_UNIXTIME(ArrivalDateTime, '%Y-%m-%d %H:%i:%s') |
+-----------------------------------------------------+
| 2019-01-03 12:45:30                                 |
| 2018-12-31 04:30:20                                 |
| 2017-06-02 05:55:57                                 |
+-----------------------------------------------------+
3 rows in set (0.00 sec)

このように、int型で保存されたUNIXタイムスタンプが、「YYYY-MM-DD HH:MM:SS」形式のわかりやすい日付文字列に変換されて表示されました。

補足:注意点

  • FROM_UNIXTIME() が返す日時は、MySQLサーバーのタイムゾーン設定の影響を受けます。期待通りの日時にならない場合は、タイムゾーン設定(time_zone)を確認してください。
  • 逆に、日付文字列からUNIXタイムスタンプへ変換したい場合は UNIX_TIMESTAMP() 関数を使用します。
  • 2038年問題への対応など、より大きな範囲の日時を扱う場合は、DATETIME型での保存も検討するとよいでしょう。
  1. 特殊文字を含む特定の文字列を選択するためのMySQLクエリ

    データベースの検索では、アポストロフィ()などの特殊文字が含まれる文字列を扱いたい場面があります。本記事では、REPLACE関数を活用して、特殊文字を含むレコードを柔軟に抽出するMySQLクエリの書き方を解説します。1. サンプルテーブルの作成まず、検索対象となるテーブルを作成します。mysql> create table DemoTable ( Title text ); Query OK, 0 rows affected (0.66 sec)2. テストデータの挿入次に、INSERT文を使ってアポストロフィを含むレコードと含まないレコードを挿入します。mysql> in

  2. MySQLで当日の00:00から現在時刻までのレコードを抽出するクエリの書き方

    はじめにMySQLで「今日の日付の午前0時(00:00)から現在時刻まで」のレコードを取得したいケースはよくあります。例えば、現在の日時が 2019-09-14 08:50:10 である場合、2019-09-14 00:00:00 から 2019-09-14 08:50:10 までの範囲にあるレコードを抽出することになります。本記事では、実際にテーブルを作成し、データを挿入しながら、この条件を実現するクエリを具体的に解説します。サンプルテーブルの作成まず、DATETIME型のカラムを持つテーブルを作成します。mysql> create table DemoTable( &nbs