問題:
MySQLの文字列値から時間を抽出したい。
例:
次のような文字列値があります:
‘Wednesday, 10 February 2021, 12:30:20’
時間の部分「12:30:20」のみを抽出したい。
解決策:
クエリは次のとおりです:
SELECT DATE_FORMAT(STR_TO_DATE("Wednesday, 10 February 2021, 12:30:20", "%W, %d-%m-%Y, %T"), "%T");
ディスカッション:
プロセスをより明確に説明するために、これを2つの部分で説明します。
まず、文字列を日付値に変換する必要があります。これを行うには、STR_TO_DATE
を使用します 働き。クエリは次のようになります:
SELECT STR_TO_DATE("Wednesday, 10 February 2021, 12:30:20", "%W, %d-%m-%Y, %T”);
STR_TO_DATE
の目的 関数は、テキスト文字列を日時形式に変換することです。この関数の構文は次のとおりです。
STR_TO_DATE(string, format);
この関数の最初の引数は、変換する文字列です。 2番目の引数は、文字列の形式を指定します。この場合、次のパラメータを使用します。
- %W:日曜日から土曜日までの平日の名前。
- %d:01から31までの数値としての月の日。
- %m:01から12までの数値としての月。
- %Y:4桁の数値(yyyy)としての年。
- %T:24時間形式の時間(hh:mm:ss)。
MySQLの公式ドキュメントでより多くのパラメータを見つけることができます。
このクエリの結果は次のようになります。
2021-02-10 12:30:20
これで、DATETIMEデータ型の値が得られました。時間のみを抽出するには、DATE_FORMAT
を追加する必要があります 上記のクエリに機能します。
DATE_FORMAT
の一般的な構文 機能は次のとおりです:
DATE_FORMAT(date, format)
すると、クエリは次のようになります。
SELECT DATE_FORMAT(STR_TO_DATE("Wednesday, 10 February 2021, 12:30:20", "%W, %d-%m-%Y, %T"), "%T");
この例では、DATE_FORMAT
の最初の引数 関数は、STR_TO_DATE
の結果の日付です 働き。 2番目の引数は形式であり、STR_TO_DATE
と同じように機能します。 働き。ここでは時間が必要なだけなので、「%T
」を指定します 「2番目の引数として。
%文字は、フォーマット指定文字の前に必須です。すべての句読点を含め、まったく同じ順序で形式を指定する必要があります。
以下に表示されるクエリ結果は、期待される結果です。
12:30:20
これら2つの関数を組み合わせて使用することにより、テキスト文字列から日付と時刻の可能なすべての組み合わせを抽出できます。