MySQLバージョ別解説!タイムスタンプをDATETIMEに変換
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