sql - 将 MM:SS varchar 转换为 HH:MM:SS 然后转换为秒
问题描述
我在将 MM:SS varchar 字段转换为 HH:MM:SS 以获得总秒数时遇到问题。该字段表示电话持续时间,并以长字符串形式出现。
Phone Duration (MM:SS)
5 :53
8 :47
NULL
14 :11
29 :27
5 :26
5 :38
我的目标是将电话持续时间转换为秒。所以 5:53 将是 353 秒。我收到一个转换错误,我认为这是由于分钟数大于 24。
我试图首先修剪电话持续时间字段并将其转换为时间。然后将时间转换为秒。
with cte1 as (
select
employee
,CAST(REPLACE(LTRIM(RTRIM(phone_duration)), ' ', '') as time) as Phone_Duration
from employee_calls
)
select
employee
,(CAST(CONVERT(DATETIME, Phone_Duration) AS FLOAT)*24*60) as Phone_Duration_Sec
from cte1
上面的查询导致转换错误。
“从字符串转换日期和/或时间时转换失败。” 我认为这个问题与分钟数大于 24 导致值超出范围有关。关于如何正确转换电话持续时间字段的任何想法?
解决方案
似乎您只需要使用CONVERT
and DATEDIFF
:
DATEDIFF(SECOND,'00:00:00', TRY_CONVERT(time,'00:' + phone_duration))
NULL
请注意,如果您的值大于,这将返回'59:59'
,但是,我假设您没有此类值,因为它们不在您的示例数据中。
如果您确实有大于 的值'59:59
,您可以这样做:
SELECT V.phone_duration,
(TRY_CONVERT(int,LEFT(V.phone_duration,CI.I-1)) * 60) + TRY_CONVERT(int,STUFF(V.phone_duration,1,CI.I,''))
FROM (VALUES('5:53'),
('8:47'),
(NULL),
('14:11'),
('29:27'),
('5:26'),
('62:39'),
('5:38'))V(phone_duration)
CROSS APPLY(VALUES(NULLIF(CHARINDEX(':',V.phone_duration),0)))CI(I);
推荐阅读
- java - 如何在 Spring Boot 应用程序中编写静态资源文件
- python - 在 Django 管理面板中加载页面时将字段值初始化为 null
- laravel - 请求 Laravel 雄辩的结构或其他方式
- arrays - 获取 cosmos db 中数组中不包含的结果
- mybatis - ibatis地图列表
进入@Result - python - 在命令提示符下使用 pip 时出现语法错误
- python-3.x - Numpy 无法访问列
- c - BMA253 加速度计芯片 ID 接收错误
- python - 使用两种不同方法构建 TF Keras RNN 时的行为差异
- laravel - Laravel Hyn/Tenancy 数据库 [租户] 未配置