MySQLのDATE_FORMAT
関数について書いています。
DATE_FORMAT
関数は、日付や時刻の値を指定したフォーマットに従って文字列に変換するために使用されます。
この関数を使うことで、データベースに格納されている日付データを、Webサイトの表示形式やレポートの出力形式など、様々な要件に合わせて柔軟に整形することができます。
この記事ではDATE_FORMAT
関数の基本的な使い方から、よく使うフォーマット指定子などを解説しています。
DATE_FORMAT関数の基本的な構文
DATE_FORMAT
関数の基本的な構文は以下の通りです。
DATE_FORMAT(date, format)
date
: 整形したい日付または日時型のカラムや値。format
: 日付や時刻をどのように整形するかを指定するフォーマット文字列。この文字列には、特定のパターンを表すフォーマット指定子が含まれます。
主要なフォーマット指定子一覧
DATE_FORMAT
関数でよく使用される主要なフォーマット指定子を以下にまとめました。
指定子 | 説明 | 例 |
---|---|---|
%Y |
4桁の年 (YYYY) | 2023 |
%y |
2桁の年 (YY) | 23 |
%m |
2桁の月 (01-12) | 05 |
%c |
月 (1-12) | 5 |
%M |
月のフルネーム (January-December) | May |
%b |
月の省略名 (Jan-Dec) | May |
%d |
2桁の日 (01-31) | 08 |
%e |
日 (1-31) | 8 |
%H |
24時間形式の時 (00-23) | 14 |
%k |
24時間形式の時 (0-23) | 14 |
%h |
12時間形式の時 (01-12) | 02 |
%I |
12時間形式の時 (01-12) | 02 |
%l |
12時間形式の時 (1-12) | 2 |
%i |
2桁の分 (00-59) | 30 |
%s |
2桁の秒 (00-59) | 55 |
%S |
2桁の秒 (00-59) | 55 |
%p |
AM または PM |
PM |
%W |
週のフルネーム (Sunday-Saturday) | Wednesday |
%a |
週の省略名 (Sun-Sat) | Wed |
%w |
曜日 (0=Sunday, 1=Monday, …, 6=Saturday) | 3 |
%j |
年の通算日 (001-366) | 128 |
%U |
年の週番号 (日曜日を週の最初の日とする) (00-53) | 18 |
%u |
年の週番号 (月曜日を週の最初の日とする) (00-53) | 19 |
%% |
リテラルの % |
% |
注意: フォーマット文字列では、これらの指定子と、ハイフン (-
)、スラッシュ (/
)、コロン (:
) などのリテラル文字を組み合わせて使用できます。
DATE_FORMAT関数の具体的な使用例
実際にDATE_FORMAT
関数を使って日付を整形する例を見ていきましょう。
例1:基本的な日付形式 (YYYY-MM-DD)
SELECT DATE_FORMAT('2025-05-13', '%Y-%m-%d');
-- 結果:2025-05-13
例2:スラッシュ区切りの日付形式 (YYYY/MM/DD)
SELECT DATE_FORMAT('2025-05-13', '%Y/%m/%d');
-- 結果:2025/05/13
例3:月の名前を含む形式 (YYYY年M月D日)
SELECT DATE_FORMAT('2025-05-13', '%Y年%c月%e日');
-- 結果:2025年5月13日
例4:曜日を含む形式 (YYYY-MM-DD (曜日))
SELECT DATE_FORMAT('2025-05-13', '%Y-%m-%d (%a)');
-- 結果:2025-05-13 (Tue)
例5:時間を含む形式 (YYYY-MM-DD HH:MM:SS)
SELECT DATE_FORMAT('2025-05-13 15:45:30', '%Y-%m-%d %H:%i:%s');
-- 結果:2025-05-13 15:45:30
例6:12時間形式とAM/PM (YYYY-MM-DD hh:mm:ss AM/PM)
SELECT DATE_FORMAT('2025-05-13 15:45:30', '%Y-%m-%d %h:%i:%s %p');
-- 結果:2025-05-13 03:45:30 PM
例7:テーブルのカラムを整形する
orders
テーブルのorder_date
カラムをYYYY年MM月DD日
形式で取得するといった場合です。
変換したいカラムを指定することで、カラムの内容が日付だった場合に整形された状態で取得できます。
SELECT order_id, DATE_FORMAT(order_date, '%Y年%m月%d日') AS formatted_date
FROM orders;
DATE_FORMAT関数を使う際の注意点
- 大文字・小文字の区別: フォーマット指定子は大文字と小文字が区別されます。例えば、
%M
は月のフルネームですが、%m
は2桁の月を表します。 - リテラル文字のエスケープ: フォーマット文字列内で
%
記号をリテラルとして使用したい場合は、%%
と記述する必要があります。 - 日付型のデータ:
DATE_FORMAT
関数の最初の引数は、有効な日付型または日時型のデータである必要があります。文字列型の場合は、MySQLが自動的に型変換を試みますが、意図しない結果になる可能性があるため、適切なデータ型を使用することが推奨されます。 - パフォーマンス: 大量のデータに対して
DATE_FORMAT
関数を頻繁に使用すると、パフォーマンスに影響を与える可能性があります。特に複雑なフォーマットを使用する場合は注意が必要です。可能な限り、アプリケーション側で整形処理を行うことも検討しましょう。 - ロケール:
DATE_FORMAT
関数の出力は、MySQLサーバーのロケール設定に依存する場合があります。特に月の名前や曜日の名前は、ロケールによって異なることがあります。
DATE_FORMAT関数で変換できなかったとき
与えられた値が日付や日時の形式として、解釈できない文字列や数値だった場合は、DATE_FORMAT
関数では通常NULL
が返ってきます。
- データ型の重要性: 日付や時刻を扱うカラムは、適切なデータ型 (DATE, DATETIME, TIMESTAMP) で定義することが重要です。これにより、データの整合性が保たれ
DATE_FORMAT
関数も期待通りに動作します。 - 明示的な型変換: もし文字列型のカラムに日付のようなデータが入っている場合は、
STR_TO_DATE
関数などを使って明示的に日付型に変換してからDATE_FORMAT
を適用する方が安全で確実です。
まとめ
MySQLのDATE_FORMAT
関数は、日付や時刻のデータを様々な形式で文字列に整形するための強力なツールです。
データベースに格納された日付データをユーザーフレンドリーな形式で表示したり、特定のレポート要件に合わせた出力を行ったりする際に、ぜひDATE_FORMAT
関数を活用してください。
ただし、パフォーマンスやロケールの影響には注意し、状況に応じて適切な方法を選択することが重要です。
コメント