その他の方法:CAST関数、TIMESTAMP_ADD関数、FROM_UNIXTIME関数、STR_TO_DATE関数

2024-04-08

MySQLでDATETIME型から時間要素を取り除く方法

MySQLのDATETIME型には、日付と時間情報が含まれています。しかし、場合によっては、日付情報のみが必要となり、時間要素を取り除きたいことがあります。このチュートリアルでは、さまざまな方法でDATETIME型から時間要素を取り除く方法を解説します。

方法

  1. DATE関数

DATE関数は、DATETIME型から日付部分のみを抽出します。

SELECT DATE(datetime_column) FROM table_name;

SELECT DATE('2024-04-07 11:55:00');

出力

2024-04-07
  1. EXTRACT関数
SELECT EXTRACT(YEAR FROM datetime_column),
       EXTRACT(MONTH FROM datetime_column),
       EXTRACT(DAY FROM datetime_column)
FROM table_name;
SELECT EXTRACT(YEAR FROM '2024-04-07 11:55:00'),
       EXTRACT(MONTH FROM '2024-04-07 11:55:00'),
       EXTRACT(DAY FROM '2024-04-07 11:55:00');
2024
4
7
  1. SUBSTRING関数

SUBSTRING関数は、文字列の一部を切り取ることができます。

SELECT SUBSTRING(datetime_column, 1, 10) FROM table_name;
SELECT SUBSTRING('2024-04-07 11:55:00', 1, 10);
2024-04-07
  1. CASE式

CASE式を使用して、条件に基づいて異なる値を抽出できます。

SELECT CASE WHEN HOUR(datetime_column) = 0
           THEN DATE(datetime_column)
           ELSE datetime_column
       END
FROM table_name;
SELECT CASE WHEN HOUR('2024-04-07 11:55:00') = 0
           THEN DATE('2024-04-07 11:55:00')
           ELSE '2024-04-07 11:55:00'
       END;
2024-04-07

上記のように、MySQLでDATETIME型から時間要素を取り除く方法はいくつかあります。それぞれの方法には長所と短所があり、状況に合わせて最適な方法を選択する必要があります。




-- テーブルの作成
CREATE TABLE IF NOT EXISTS `my_table` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `datetime_column` DATETIME NOT NULL,
  PRIMARY KEY (`id`)
);

-- データの挿入
INSERT INTO `my_table` (`datetime_column`) VALUES
('2024-04-07 11:55:00'),
('2024-04-08 12:00:00'),
('2024-04-09 13:00:00');

-- DATE関数による日付部分の抽出
SELECT DATE(`datetime_column`) FROM `my_table`;

-- EXTRACT関数による日付部分の抽出
SELECT EXTRACT(YEAR FROM `datetime_column`),
       EXTRACT(MONTH FROM `datetime_column`),
       EXTRACT(DAY FROM `datetime_column`)
FROM `my_table`;

-- SUBSTRING関数による日付部分の抽出
SELECT SUBSTRING(`datetime_column`, 1, 10) FROM `my_table`;

-- CASE式による日付部分の抽出
SELECT CASE WHEN HOUR(`datetime_column`) = 0
           THEN DATE(`datetime_column`)
           ELSE `datetime_column`
       END
FROM `my_table`;
2024-04-07
2024-04-08
2024-04-09

2024 4 7
2024 4 8
2024 4 9

2024-04-07
2024-04-08
2024-04-09

2024-04-07
2024-04-08
2024-04-09



CAST関数は、データ型を変換するために使用できます。DATETIME型をDATE型に変換することで、時間要素を取り除くことができます。

SELECT CAST(datetime_column AS DATE) FROM table_name;
SELECT CAST('2024-04-07 11:55:00' AS DATE);
2024-04-07

TIMESTAMP_ADD関数は、TIMESTAMP型に時間間隔を加算するために使用できます。時間間隔を0に設定することで、時間要素を取り除くことができます。

SELECT TIMESTAMP_ADD(datetime_column, INTERVAL 0 SECOND) FROM table_name;
SELECT TIMESTAMP_ADD('2024-04-07 11:55:00', INTERVAL 0 SECOND);
2024-04-07 00:00:00

FROM_UNIXTIME関数は、UNIXタイムスタンプからDATETIME型に変換するために使用できます。UNIXタイムスタンプは、時間要素のみを含む数値です。

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(datetime_column));
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('2024-04-07 11:55:00'));
2024-04-07 00:00:00

STR_TO_DATE関数は、文字列をDATE型に変換するために使用できます。文字列形式をYYYY-MM-DDに設定することで、時間要素を取り除くことができます。

SELECT STR_TO_DATE(datetime_column, '%Y-%m-%d');
SELECT STR_TO_DATE('2024-04-07 11:55:00', '%Y-%m-%d');
2024-04-07

sql mysql datetime


RENAME DATABASEステートメントとALTER DATABASEステートメントの違い

方法1:RENAME DATABASE ステートメントを使うこれは、MySQL 5.1以降で推奨されている方法です。この方法は、データベースとそのすべてのテーブル、インデックス、ビュー、ストアドプロシージャなどを一括で変更することができます。...


重複行をまとめるには GROUP BY と DISTINCT のどちらを使うべきか?

DISTINCT:DISTINCT は、SELECT 結果から重複行を 削除 する機能です。例:このクエリは、users テーブルから重複する名前を除いて、すべての名前を 1行ずつ 表示します。GROUP BY:このクエリは、users テーブルを 国ごとにグループ化 し、各国のユーザー数 (COUNT(*)) を表示します。...


1つの大きなMySQLデータベースと1000個の小さなSQLiteデータベース:徹底比較

利点:データの統合と管理が容易高度なクエリと分析機能複雑なデータ関係の処理スケーラビリティとパフォーマンス設定と管理が複雑リソースの消費量が多い単一障害点の可能性パフォーマンスのボトルネック軽量で高速独立性とスケーラビリティ障害の影響範囲が小さい...


MariaDB alter table row format doesn't work の原因と解決策

MariaDBでALTER TABLEコマンドを使用してテーブルの行形式を変更しようとすると、エラーが発生することがあります。原因:この問題は、いくつかの要因が考えられます。innodb_file_formatの設定: innodb_file_formatがBARROWでない場合、ROW_FORMATを変更できません。...