SQLでDATE_FORMAT()関数を使って日付データを簡単にフォーマット変更する方法

SQLで日付データを扱う際には、特定のフォーマットで表示する必要が生じることが多々あります。MySQLのDATE_FORMAT()関数を使用すると、日付データを様々なフォーマットに簡単に変換できます。本記事では、DATE_FORMAT()関数の基本的な使い方から応用例までを詳しく解説します。

目次

DATE_FORMAT()関数の基本的な使い方

DATE_FORMAT()関数は、日付データを指定したフォーマットに変換するために使用されます。基本構文は以下の通りです。

DATE_FORMAT(date, format)
  • date:フォーマットを変更したい日付データ
  • format:指定したいフォーマット

例えば、2024-05-23という日付をYYYY-MM-DD形式からMM/DD/YYYY形式に変換する場合のSQLクエリは次のようになります。

SELECT DATE_FORMAT('2024-05-23', '%m/%d/%Y') AS formatted_date;

このクエリの結果は05/23/2024となります。次に、DATE_FORMAT()関数で使用できるフォーマット指定子について詳しく見ていきましょう。

フォーマット指定子の一覧

DATE_FORMAT()関数では、様々なフォーマット指定子を使って日付を表示できます。主なフォーマット指定子を以下に示します。

日付関連のフォーマット指定子

  • %Y:4桁の年(例:2024)
  • %y:2桁の年(例:24)
  • %m:2桁の月(01-12)
  • %c:月(1-12)
  • %d:2桁の日(01-31)
  • %e:日(1-31)

時刻関連のフォーマット指定子

  • %H:2桁の24時間制の時(00-23)
  • %k:24時間制の時(0-23)
  • %h:2桁の12時間制の時(01-12)
  • %I:12時間制の時(01-12)
  • %l:12時間制の時(1-12)
  • %i:2桁の分(00-59)
  • %s:2桁の秒(00-59)
  • %p:AMまたはPM

その他のフォーマット指定子

  • %W:曜日名(例:Sunday)
  • %a:短縮された曜日名(例:Sun)
  • %M:月名(例:January)
  • %b:短縮された月名(例:Jan)
  • %j:年の通算日(001-366)

これらの指定子を組み合わせて、様々な形式の日付表示が可能です。次に、これらの指定子を使った具体的な使用例を見ていきます。

実際の使用例

DATE_FORMAT()関数を使って日付データを様々なフォーマットに変換する具体例を見ていきます。

例1: 標準的な日付フォーマットの変更

以下の例では、2024-05-23という日付をMM/DD/YYYY形式に変換します。

SELECT DATE_FORMAT('2024-05-23', '%m/%d/%Y') AS formatted_date;

結果:05/23/2024

例2: 月名と年のみを表示

日付データから月名と年を抽出して表示します。

SELECT DATE_FORMAT('2024-05-23', '%M %Y') AS formatted_date;

結果:May 2024

例3: 日付と曜日を表示

日付と曜日名を含むフォーマットに変換します。

SELECT DATE_FORMAT('2024-05-23', '%W, %M %d, %Y') AS formatted_date;

結果:Thursday, May 23, 2024

例4: 時刻データのフォーマット

時刻データをHH:MM AM/PM形式に変換します。

SELECT DATE_FORMAT('2024-05-23 14:30:00', '%h:%i %p') AS formatted_time;

結果:02:30 PM

例5: フルタイムスタンプの表示

日付と時刻を含むフルタイムスタンプのフォーマットを変更します。

SELECT DATE_FORMAT('2024-05-23 14:30:00', '%Y-%m-%d %H:%i:%s') AS formatted_timestamp;

結果:2024-05-23 14:30:00

これらの例を参考にして、必要なフォーマットに日付データを変換してみてください。次に、DATE_FORMAT()関数の応用例を見ていきましょう。

応用例

DATE_FORMAT()関数を活用すると、より複雑な要件にも対応できます。ここでは、複数のカラムでの使用や条件付きフォーマット変更の例を紹介します。

例1: 複数のカラムを使用した日付フォーマット

複数の日付カラムを異なるフォーマットで表示する場合の例です。

SELECT 
    DATE_FORMAT(order_date, '%Y-%m-%d') AS formatted_order_date,
    DATE_FORMAT(delivery_date, '%M %d, %Y') AS formatted_delivery_date
FROM orders;

このクエリでは、order_dateYYYY-MM-DD形式に、delivery_dateMonth DD, YYYY形式にフォーマット変更して表示します。

例2: 条件付きでフォーマットを変更する

条件に基づいてフォーマットを変更する場合の例です。ここでは、statusカラムの値によって日付フォーマットを変更します。

SELECT 
    order_id,
    status,
    CASE 
        WHEN status = 'shipped' THEN DATE_FORMAT(ship_date, '%M %d, %Y')
        ELSE DATE_FORMAT(order_date, '%Y-%m-%d')
    END AS formatted_date
FROM orders;

このクエリでは、statusshippedの場合はship_dateMonth DD, YYYY形式で、それ以外の場合はorder_dateYYYY-MM-DD形式で表示します。

例3: 動的に生成された日付のフォーマット

現在の日付を動的に生成してフォーマットを変更する場合の例です。

SELECT DATE_FORMAT(NOW(), '%W, %M %d, %Y %h:%i %p') AS current_datetime;

このクエリでは、現在の日時をWeekday, Month Day, Year Hour:Minute AM/PM形式で表示します。

例4: ロケールに応じた日付フォーマット

ロケールに応じた日付表示を行う場合の例です。例えば、日本語ロケールで日付を表示する場合です。

SELECT DATE_FORMAT(order_date, '%Y年%m月%d日') AS formatted_date_jp
FROM orders;

このクエリでは、order_dateを日本語ロケールのYYYY年MM月DD日形式で表示します。

これらの応用例を参考にして、DATE_FORMAT()関数を柔軟に活用してみてください。次に、DATE_FORMAT()関数の活用方法を総括し、実務での活用に役立つポイントをまとめます。

まとめ

DATE_FORMAT()関数は、MySQLで日付データのフォーマットを柔軟に変更できる強力なツールです。基本的な使い方から始まり、フォーマット指定子の詳細や実際の使用例、さらに応用例を通じて、日付データを自由に操作する方法を学びました。以下に重要なポイントをまとめます。

DATE_FORMAT()関数のポイント

  • 基本構文DATE_FORMAT(date, format)を使って、指定したフォーマットに日付を変換。
  • フォーマット指定子:年、月、日、時刻、曜日など様々な指定子を組み合わせることで、多彩な表示が可能。
  • 実際の使用例:標準的な日付フォーマットの変更や、特定のフォーマットでの時刻表示など。
  • 応用例:複数のカラムでのフォーマット変更、条件付きフォーマット変更、動的に生成された日付のフォーマット、ロケールに応じた表示など。

DATE_FORMAT()関数を使いこなすことで、データベースから取得した日付データを見やすい形式で提供し、アプリケーションやレポートの品質を向上させることができます。ぜひ、日常のデータ操作や分析に活用してみてください。

コメント

コメントする

目次