2014-10-26 68 views
0

我有一個帶有視頻持續時間的MySQL表。將時間存儲爲MySql中的TIME時間

我有來自許多不同來源的視頻,持續時間被導入數據庫而沒有標準化。我期待在此標準化持續時間。

考慮下面的表結構:

+-----------+ 
| Duration | 
+-----------+ 
| 5h58m38s | 
| 22m59s | 
| 05m29s | 
| 06m09s | 
| 00m06s | 
| 00m00s | 
+-----------+ 

我要轉換格式爲:00m00s爲HH:MM:SS。

例如:

22m59s should be 00:22:59 
5h58m38s should be 05:58:38 

我怎樣才能做到這一點在MySQL?

我嘗試使用查詢:

UPDATE table SET duration = sec_to_time(duration); 

這沒有工作,我迷路了。所有評論和回答非常感謝,非常感謝!

+2

'sec_to_time'預計參數爲秒數。你需要解析這些'Duration'字符串並將它們轉換爲秒。將小時乘以3600,將分鐘乘以60,並將它們添加到秒。 – Barmar 2014-10-26 21:52:00

+0

感謝您的回覆。我將如何去做這件事?你能給個例子嗎? – 2014-10-26 22:13:41

+1

有很多LOCATE和SUBSTR調用。這在SQL中很煩人,而且是晚餐時間,所以我不會花費15分鐘來完成這個任務。 – Barmar 2014-10-26 22:18:17

回答

0

而不是SEC_TO_TIME使用STR_TO_DATE。由於您有三種格式,您需要調用三次。因爲它在失敗時返回NULL(並且由於三種格式中只有一種格式匹配而失敗,所以它最多失敗兩次),請使用COALESCE獲取您正在查找的第一個非NULL值。

UPDATE table 
    SET duration = COALESCE(
        STR_TO_DATE(duration, '...'), 
        STR_TO_DATE(duration, '...'), 
        STR_TO_DATE(duration, '...') 
       ) 
; 

採用手動的幫助下,你應該能夠找出我已經離開了開放與'...'格式字符串。

相關問題