2017-06-06 5 views
3

の秒日間の変換:私は秒に次の列を変換する必要がMySQLの

+----------------------+ 
| duration    | 
+----------------------+ 
| 00:15:52.22   | 
| 01:15:51.65   | 
| 02:15:50.93   | 
| 27 days, 06:22:41.11 | 
| 27 days, 07:22:40.76 | 
| 27 days, 08:22:40.43 | 
+----------------------+ 

問題はTIME_TO_SEC()機能のみ、以下の結果を返す最初の3行のために正しく動作することです:

+-----------------------+ 
| TIME_TO_SEC(duration) | 
+-----------------------+ 
|   952.220000 | 
|   4551.650000 | 
|   8150.930000 | 
|    27.000000 | 
|    27.000000 | 
|    27.000000 | 
+-----------------------+ 

すべての行を秒単位に変換するために使用できる関数はありますか?

+0

データ型は、この列は何ですか? –

+0

@ChetanRanpariyaそれは 'varchar'です –

答えて

3

次の回答は、duration列のすべてのエントリが時間コンポーネントのみの形式か、または数日後に時間コンポーネントの形式を取ることを前提としています。これを仮定すると、CASE式を使用して、どちらのタイプのデータも選択的に解析できます。日数コンポーネントがある場合、秒に変換し、これを時間コンポーネントからの秒数に追加することができます。

SELECT 
    CASE WHEN duration LIKE '%days%' 
     THEN CAST(SUBSTRING_INDEX(duration, ' ', 1) AS UNSIGNED) * 24*60*60 + 
       TIME_TO_SEC(SUBSTRING_INDEX(duration, ' ', -1)) 
     ELSE TIME_TO_SEC(duration) 
    END AS duration_in_seconds 
FROM yourTable 

出力:ここ

enter image description here

デモ:

Rextester

関連する問題