2016-08-17 6 views
0

期間と期間を「PTxxMxxS」の形式で格納するMySQLデータベースを使用しています。MySQLデータベースから期間/期間の形式を変換する

標準時形式に変換したいので、たとえばPT4M17Sを04:17に変換したいとします。

私はSTR_TO_DATEとTIME_FORMATの様々な組み合わせを成功させずに試しました。

私は検索しましたが、解決策が見つからない - 問題の一部は、このタイプの時刻書式が呼ばれているかわかりません。

ありがとうございました。 str_to_date()機能上のMySQLのドキュメントとして

+1

mysqlの日付/時刻フィールドは実際の日付/時刻です。間隔/期間を保存していますが、これは日付/時刻にきれいにマッピングされません。例えば'PT999H'は有効な間隔ですが、それをmysqlの時刻フィールドに入れると、mysqlの時刻は約+/- 838時間になるので、破損します。任意の間隔はおそらく秒を表す生の整数のような他のものに変換されるべきです。それらは簡単にいくつかのコードで区間書式に戻すことができますが、破損した時間値を変換/使用することはできません。 –

+0

有効な期間は、str_to_date()関数を使用して上記の形式をMySQLの時刻形式に変換することができます。何を試してみましたか? – Shadow

+0

これはデータを取得する必要があるデータベースなので、そのコンテンツを制御することはできません。タイムフォーマットPTxxMxxSは対処しなければならないものです。 STR_TO_DATE(fieldvalue、 '%h:%i:%s)を使用してみました。TIME_FORMATと似ています。 – jhTuppeny

答えて

0

は言う:

サーバーのスキャンは、それまでのフォーマットに一致するようにしようとSTR。

上記は、結果の出力をフォーマットするのではなく、入力文字列を解析するためにformatパラメータが使用されることを意味します。これがあなたの変換が失敗した理由です。

以下の呼び出しでは、 'PTxxMxxS'形式から標準のmysql形式に変換されます(formatパラメータで最後のS文字を指定する必要はありませんが、必要であれば追加できます)。 @MarcBがすでに指摘したように

STR_TO_DATE(fieldvalue, 'PT%iM%s') 

はしかし、MySQLのtime data typeは、その範囲に制限がありますので、str_to_date()関数を使用して、簡単な変換はあなたのために適切でないかもしれません。変換を適用する前にデータを確認してください。

+0

答えとすべてのコメントをありがとう - 非常に感謝します。 STR_TO_DATEとTIME_FORMATの組み合わせが機能しました。 – jhTuppeny

関連する問題