MySQLバージョ別解説!タイムスタンプをDATETIMEに変換

2024-04-20

MySQLでタイムスタンプをDATETIMEに変換する方法

FROM_UNIXTIME()関数は、UNIX時刻(秒単位の時間)を指定された形式の日付時刻に変換します。この関数は、タイムスタンプがUNIX時刻で格納されている場合に便利です。

SELECT FROM_UNIXTIME(timestamp_column) AS datetime_column
FROM your_table;

例:

SELECT FROM_UNIXTIME(created_at) AS creation_date
FROM users;

このクエリは、usersテーブルのcreated_at列にあるUNIX時刻をcreation_dateという名前のDATETIME列に変換して返します。

SELECT STR_TO_DATE(timestamp_column, '%Y-%m-%d %H:%M:%S') AS datetime_column
FROM your_table;
SELECT STR_TO_DATE(last_login, '%Y-%m-%d %H:%M:%S') AS last_login_datetime
FROM users;

DATE()関数は、日付部分を抽出します。この関数は、タイムスタンプから日付部分のみを取り出したい場合に便利です。

SELECT DATE(timestamp_column) AS date_column
FROM your_table;
SELECT DATE(order_date) AS order_date_without_time
FROM orders;

このクエリは、ordersテーブルのorder_date列にある日付部分をorder_date_without_timeという名前のDATE列に変換して返します。

注意点

  • 上記の例では、デフォルトの形式を使用しています。必要に応じて形式を変更してください。
  • MySQL 8.0以降では、TIMESTAMP列を直接DATETIME列に代入することもできます。
UPDATE your_table
SET datetime_column = timestamp_column;



FROM_UNIXTIME()関数を使う

-- 仮のテーブルとデータ
CREATE TABLE orders (
  order_id INT PRIMARY KEY AUTO_INCREMENT,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO orders (created_at) VALUES
  ('2024-04-19 20:30:10'),
  ('2024-04-19 21:00:00');

-- タイムスタンプをDATETIMEに変換してSELECT
SELECT order_id, FROM_UNIXTIME(created_at) AS order_datetime
FROM orders;

出力:

order_id | order_datetime
------- | --------
1        | 2024-04-19 20:30:10
2        | 2024-04-19 21:00:00

STR_TO_DATE()関数を使う

-- 仮のテーブルとデータ
CREATE TABLE users (
  user_id INT PRIMARY KEY AUTO_INCREMENT,
  last_login VARCHAR(255) NOT NULL
);

INSERT INTO users (last_login) VALUES
  ('2024-04-19T20:30:10'),
  ('2024-04-19T21:00:00');

-- 文字列をDATETIMEに変換してSELECT
SELECT user_id, STR_TO_DATE(last_login, '%Y-%m-%dT%H:%M:%S') AS last_login_datetime
FROM users;
user_id | last_login_datetime
------- | --------
1        | 2024-04-19 20:30:10
2        | 2024-04-19 21:00:00
-- 仮のテーブルとデータ (ordersテーブルと同じ)
CREATE TABLE orders (
  order_id INT PRIMARY KEY AUTO_INCREMENT,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO orders (created_at) VALUES
  ('2024-04-19 20:30:10'),
  ('2024-04-19 21:00:00');

-- タイムスタンプから日付部分のみを抽出してSELECT
SELECT order_id, DATE(created_at) AS order_date
FROM orders;
order_id | order_date
------- | --------
1        | 2024-04-19
2        | 2024-04-19

TIMESTAMP列を直接DATETIME列に代入する

-- 仮のテーブルとデータ (ordersテーブルと同じ)
CREATE TABLE orders (
  order_id INT PRIMARY KEY AUTO_INCREMENT,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO orders (created_at) VALUES
  ('2024-04-19 20:30:10'),
  ('2024-04-19 21:00:00');

-- TIMESTAMP列をDATETIME列に直接代入
UPDATE orders
SET order_datetime = created_at;

-- 変換結果を確認
SELECT order_id, order_datetime
FROM orders;
order_id | order_datetime
------- | --------
1        | 2024-04-19 20:30:10
2        | 2024-04-19 21:00:00

説明:

上記のコードは、それぞれ異なる方法でタイムスタンプをDATETIMEに変換する例です。どの方法を使用するかは、状況によって異なります。

  • FROM_UNIXTIME()関数: UNIX時刻で格納されたタイムスタンプをに変換する場合に便利です。
  • TIMESTAMP列の直接代入: MySQL 8.0以降であれば、この方法で簡潔に代



MySQLでタイムスタンプをDATETIMEに変換するその他の方法

CONCAT()関数とSTR_TO_DATE()関数を組み合わせて、文字列形式に変換してからDATETIMEに変換する方法です。

SELECT
  order_id,
  CONCAT(DATE(created_at), ' ', TIME(created_at)) AS order_datetime
FROM orders;
SELECT
  order_id,
  STR_TO_DATE(SUBSTRING(created_at, 1, 19), '%Y-%m-%d %H:%M:%S') AS order_datetime
FROM orders;

CAST()関数は、値の型を別の型に変換するために使用できます。MySQL 5.7以降では、CAST()関数を使用して、TIMESTAMPを直接DATETIMEに変換することができます。

SELECT
  order_id,
  CAST(created_at AS DATETIME) AS order_datetime
FROM orders;
SELECT
  order_id,
  FORMAT(created_at, '%Y-%m-%d %H:%M:%S') AS order_datetime
FROM orders;

mysql


MySQLのスキーマ名を変更する:RENAME SCHEMA vs ALTER DATABASE

RENAME SCHEMA ステートメントを使うこれは、MySQL 8.0以降で導入された新しい方法です。この方法を使うと、スキーマ名を簡単に変更することができます。例えば、mydb という名前のスキーマを new_mydb に変更するには、以下のコマンドを実行します。...


MySQLで重複レコードを処理する:INSERT IGNORE vs INSERT ... ON DUPLICATE KEY UPDATE

MySQLでデータを挿入する際、重複レコードの処理方法として INSERT IGNORE と INSERT . .. ON DUPLICATE KEY UPDATE の2つの方法があります。それぞれ異なる動作をするので、状況に合わせて使い分けることが重要です。...


MySQLでブール型フィールドのパフォーマンスを向上させる方法:インデックス、パーティショニング、集計テーブル、マテリアライズドビュー

MySQLデータベースでブール型フィールドにインデックスを作成するかどうかは、パフォーマンスとストレージのトレードオフを伴う複雑な問題です。適切な判断を行うためには、データの特性、クエリのワークロード、およびデータベースサーバーの全体的なパフォーマンスを考慮する必要があります。...


MySQLサーバーに接続できない?「Can't find mysqld.sock」エラーの原因と解決方法を徹底解説

MySQLに接続しようとすると、以下のエラーメッセージが表示されることがあります。このエラーは、MySQLサーバーが起動していないか、ソケットファイルが破損または存在しないことを示しています。原因このエラーには、主に以下の原因が考えられます。...


限定数しか取得できない?MySQL/MariaDBでDISTINCTとLIMITを組み合わせる技

MySQLとMariaDBでは、DISTINCTキーワードを使用して、SELECTクエリから重複する値を除外することができます。しかし、単純なDISTINCTクエリでは、すべての重複なし値が選択されてしまいます。そこで、LIMIT句を組み合わせることで、選択する重複なし値の数を制限することができます。...


SQL SQL SQL SQL Amazon で見る



MySQLでUNIXタイムスタンプを人間が読める日付に変換する方法

Unixタイムスタンプは、1970年1月1日 00:00:00 UTCからの経過秒数を表す整数です。人間にとっては分かりにくい形式なので、MySQLを使用して人間が読める日付に変換する必要があります。方法MySQLには、FROM_UNIXTIME()関数を使用してUNIXタイムスタンプを人間が読める日付に変換する機能があります。この関数は、以下の書式で呼び出します。