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