MySQL で文字列を日付形式に変換する
この記事では、DATE として機能する文字列型の値を DATE 型の値に変換するためのさまざまな関数について説明します。また、MySQL の STR_TO_DATE()、CONVERT()、および CAST() 関数を使用して、いくつかのサンプルコードで練習します。
MySQL で文字列を日付形式に変換する
MySQL で文字列を DATE 形式に変換する次の方法を学習します。
MySQL STR_TO_DATE() 関数
この関数は、str(文字列)を DATE 値に変換します。DATE の形式は、文字列の形式に従います。たとえば、MM/DD/YYYY を文字列型から DATE 型に変換すると、DATE も MM/DD/YYYY 形式になります。
STR_TO_DATE() 関数は、入力と文字列形式に基づいて、DATE、DATETIME、または TIME の値を返すことができます。以下の例を参照して、出力と比較してください。
SELECT STR_TO_DATE('2021-08-23', '%Y-%m-%d');
出力:

フォーマットを変更するとどうなりますか?ダッシュをコンマに置き換えましょう。
SELECT STR_TO_DATE('2021-08-23', '%Y,%m,%d');
出力:

上記の出力を参照してください。NULL が返されました。フォーマットのみを YYYY-MM-DD から DD-MM-YYYY に変更しましょう。
SELECT STR_TO_DATE('2021-08-23', '%d-%m-%Y');
出力:

ほら、また NULL を返しました。つまり、入力文字列と同じ DATE 形式が必要です。TIME もあるとどうなりますか?次のコマンドを実行してみましょう。
SELECT STR_TO_DATE('2021-08-23 10:12:23', '%Y-%m-%d %T');
出力:

STR_TO_DATE() 関数はテキストを無視し、DATE のみを出力します。次の例を参照してください。
SELECT STR_TO_DATE('2021-08-23 some other string', '%Y-%m-%d') as Date;
出力:

年を抽出することもできます。年を抽出すると、日と月がゼロに設定されます。次のコードと出力を参照してください。
SELECT STR_TO_DATE('2021-08-23', '%Y') as Year; #get year
出力:

MySQL CONVERT() 関数
変換関数は、指定された値を指定された文字セットまたはデータ型に変換できます。データ型の詳細はこちらで確認できます。
SELECT CONVERT("2021-08-19", DATE); #convert to DATE
SELECT CONVERT("2021-08-19", DATETIME); #convert to DATETIME
SELECT CONVERT("2021-08-19", TIME); #convert to TIME
出力:

MySQL CAST() 関数
この関数は、任意のタイプ(文字列、整数、またはその他のもの)の入力を任意の指定されたデータ型に変換します。パラメータ値の詳細はこちらで確認できます。
SELECT CAST("2021-08-29" AS DATE) as date; #convert to date type
SELECT CAST("2021-08-29 11:12:45" AS DATETIME) as datetime; #convert to datetime type
SELECT CAST("11:12:45" AS TIME) as time; #convert to time type
出力:

まとめ
プロジェクトの要件に従って、文字列値を DATE、TIME、および DATETIME に変換する方法は複数ある可能性があると結論付けました。変換を目的とした STR_TO_DATE、CONVERT、および CAST 関数について学習しました。
