STR_TO_DATE関数とCAST関数で日付変換をマスターしよう!

2024-05-21

MySQLで文字列を日付に変換する方法

STR_TO_DATE関数は、文字列を指定された形式の日付に変換します。構文は以下の通りです。

STR_TO_DATE(文字列, フォーマット)
  • 文字列: 変換したい文字列
  • フォーマット: 文字列の日付形式を指定するフォーマット文字列

フォーマット文字列は、以下の書式記号を使って指定します。

書式記号説明
%Y2023
%m05
%d20
%H13
%i30
%s50
%fマイクロ秒123456

例:

-- 2023年5月20日を文字列から日付に変換
SELECT STR_TO_DATE('2023-05-20', '%Y-%m-%d');

CAST関数を使って、文字列を別の型に変換することもできます。日付に変換するには、以下のように使用します。

CAST(文字列 AS DATE)
-- 2023年5月20日を文字列から日付に変換
SELECT CAST('2023-05-20' AS DATE);

注意点

  • 文字列形式が指定されたフォーマットと一致しない場合、エラーが発生します。
  • 変換対象の文字列が日付として解釈できない場合は、NULLが返されます。

    MySQLで文字列を日付に変換するには、STR_TO_DATE関数またはCAST関数を使用します。どちらの関数を使う場合も、文字列形式が指定されたフォーマットと一致していることを確認する必要があります。




    -- 1. STR_TO_DATE関数を使う
    
    -- 2023年5月20日 (YYYY-MM-DD形式)
    SELECT STR_TO_DATE('2023-05-20', '%Y-%m-%d') AS 変換結果;
    
    -- 2023年5月20日 (YYYY/MM/DD形式)
    SELECT STR_TO_DATE('2023/05/20', '%Y/%m/%d') AS 変換結果;
    
    -- 2023年5月 (YYYY-MM形式)
    SELECT STR_TO_DATE('2023-05', '%Y-%m') AS 変換結果;
    
    -- 2023年 (YYYY形式)
    SELECT STR_TO_DATE('2023', '%Y') AS 変換結果;
    
    -- 2. CAST関数を使う
    
    -- 2023年5月20日 (YYYY-MM-DD形式)
    SELECT CAST('2023-05-20' AS DATE) AS 変換結果;
    
    -- 2023年5月20日 (文字列形式)
    SELECT CAST('文字列形式の日付' AS DATE) AS 変換結果;
    

    出力例

    +-----------------+
    | 変換結果      |
    +-----------------+
    | 2023-05-20 00:00:00 |
    +-----------------+
    | 2023-05-20 00:00:00 |
    +-----------------+
    | 2023-05-01 00:00:00 |
    +-----------------+
    | 2023-01-01 00:00:00 |
    +-----------------+
    | 2023-05-20 00:00:00 |
    +-----------------+
    | 2024-05-20 00:00:00 |
    +-----------------+
    

    このサンプルコードを参考に、様々な形式の文字列を日付に変換してみてください。

    補足

    • サンプルコードでは、変換結果を 変換結果 というエイリアスで表示していますが、これは任意です。お好きな名前でエイリアスを設定してください。
    • 変換対象の文字列がテーブルのカラムにある場合は、カラム名を直接指定することもできます。
    -- 例:`customers` テーブルの `birth_date` カラムを日付に変換
    SELECT STR_TO_DATE(birth_date, '%Y-%m-%d') AS 生年月日 FROM customers;
    



    MySQLで文字列を日付に変換するその他の方法

    DATE_FORMAT関数は、日付をフォーマットされた文字列に変換する関数ですが、逆変換にも使用できます。構文は以下の通りです。

    DATE_FORMAT(日付, フォーマット)
    
    • 日付: 変換したい日付
    -- 2023年5月20日を文字列 "2023-05-20" に変換
    SELECT DATE_FORMAT('2023-05-20', '%Y-%m-%d') AS 変換結果;
    
    CONVERT(文字列, DATE)
    
    -- 2023年5月20日を文字列 "2023-05-20" から日付に変換
    SELECT CONVERT('2023-05-20', DATE) AS 変換結果;
    

    SUBSTRING関数とTO_DAYS関数を使って、文字列を日付に変換する方法もあります。この方法は、文字列形式が一定でない場合などに役立ちます。

    -- 2023年05月20日を文字列 "2023年05月20日" から日付に変換
    SELECT TO_DAYS(SUBSTRING('2023年05月20日', 1, 4) + '-' +
                     SUBSTRING('2023年05月20日', 6, 2) + '-' +
                     SUBSTRING('2023年05月20日', 9, 2)) AS 変換結果;
    
    • DATE_FORMAT関数とCONVERT関数は、STR_TO_DATE関数と比べて処理速度が遅い場合があります。
    • SUBSTRING関数とTO_DAYS関数を使う方法は、複雑で分かりにくいコードになりやすいです。
    • 文字列形式が一定で、処理速度が重要でない場合は、STR_TO_DATE関数またはCAST関数を使うのがおすすめです。
    • 文字列形式が一定でない場合は、SUBSTRING関数とTO_DAYS関数を使う方法も検討できます。
    • 日付をフォーマットされた文字列に変換したい場合は、DATE_FORMAT関数を使うことができます。

      MySQLで文字列を日付に変換するには、様々な方法があります。それぞれの方法の特徴を理解し、状況に合わせて適切な方法を選択してください。


      mysql string date


      データベースのパフォーマンスを爆速化!MySQLのインデックスサイズを調査する方法

      インデックスサイズを確認するには、以下の方法があります。INFORMATION_SCHEMA テーブルを使用するMySQL には、INFORMATION_SCHEMA というスキーマが用意されており、データベースに関するさまざまな情報を格納しています。このスキーマには、インデックスのサイズに関する情報も含まれています。...


      便利なツールを活用してMySQLのトランザクションを管理する

      INFORMATION_SCHEMA. INNODB_TRXテーブルを使用するMySQL 5.0.17以降では、INFORMATION_SCHEMA. INNODB_TRXテーブルを使用して、オープンなトランザクションに関する情報を取得できます。このテーブルには、トランザクションID、ステータス、開始時間、待機時間などの情報が含まれています。...


      ロール、ビュー、VPSを活用したMySQL権限管理:読み取り専用アクセスを自在に設定

      MySQLにログインMySQLサーバーに管理者権限を持つユーザーとしてログインします。ユーザーを作成するまだユーザーが存在しない場合は、以下のコマンドを使用して新しいユーザーを作成する必要があります。このコマンドは、readonly_userという名前のユーザーを作成し、パスワードをpasswordに設定します。localhostを指定しているため、このユーザーはローカルホストからのみMySQLサーバーに接続できます。...


      MariaDB テーブル パーティションの最適化:パフォーマンス向上のためのヒント

      影響パフォーマンスへの影響: 再編成操作は、一時的にテーブルの読み書きパフォーマンスに影響を与える可能性があります。これは、再編成プロセスがテーブル内のデータを移動し、新しいパーティションを作成する必要があるためです。ロック: 再編成操作中は、テーブル全体に排他ロックがかかります。これは、他のユーザーがテーブルにアクセスできないことを意味します。...