在MySql中将存储为TEXT的时间转换为TIME

时间:2014-10-26 21:46:54

标签: php mysql

我有一个带有视频持续时间的MySQL表。

我有来自许多不同来源的视频,并且持续时间已导入数据库而未进行标准化。我希望在此标准化持续时间。

考虑以下表格结构:

+-----------+
| 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);

这不起作用,我迷路了。所有的评论和答案都非常感谢,非常感谢你!

1 个答案:

答案 0 :(得分: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, '...')
                  )
;

在手册的帮助下,你应该能够找出我用'...'打开的格式字符串。