我需要将以下列转换为秒:
+----------------------+
| 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()
函数仅对返回以下结果的前三行正常工作:
+-----------------------+
| TIME_TO_SEC(duration) |
+-----------------------+
| 952.220000 |
| 4551.650000 |
| 8150.930000 |
| 27.000000 |
| 27.000000 |
| 27.000000 |
+-----------------------+
我是否可以使用将所有行转换为秒的函数?
答案 0 :(得分:3)
以下答案假定duration
列中的每个条目仅采用时间组件的形式,或者采用时间组件后的一些天数。假设这样,我们可以使用CASE
表达式来选择性地解析任一类型的数据。如果有一个days组件,我们可以转换为秒并将其添加到时间组件的秒数。
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
<强>输出:强>
在这里演示: