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


Convert time stored as TEXT to TIME in MySql

我有一个MySQL表,其中包含一个视频的持续时间。

我有来自许多不同来源的视频,持续时间被导入数据库,但没有标准化。我希望将这里的持续时间标准化。

考虑以下表格结构:

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

我想将此格式:00毫秒转换为hh:mm:ss。

例如:

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

如何在MySQL中做到这一点?

我尝试使用查询:

UPDATE table SET duration = sec_to_time(duration);

这不起作用,我迷失了方向。非常感谢所有的评论和回答,非常感谢!

使用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, '...')
                  )
;

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