2015-06-20 106 views
-1

如何以HH:Min格式显示[总服务时间](当前值(分钟))?SQL中的数据格式(将分钟转换为HH:MM格式)

查询:

SELECT DISTINCT dbo.sectn_dept.sectn_sc AS Customer, MONTH(dbo.incident.date_logged) AS Month_Number, DATENAME(month, dbo.incident.date_logged) AS Month, YEAR(dbo.incident.date_logged) AS Year, 
dbo.incident.incident_ref PM_ref, dbo.product.product_n "Product", dbo.item.item_n "Item", 
dbo.bldng_room.bldng_room_sc, dbo.assyst_usr.assyst_usr_n, dbo.incident.last_action_date "Last Action", 
Status=case dbo.incident.inc_status when 'c' then 'Closed' when 'o' then 'Open' else 'Resolved' end, 
CASE dbo.act_reg.act_type_sc WHEN 'ADD_ATTCHMNTS' THEN 'Yes' ELSE 'No' END AS Attachmnet , 
    (select cast(total/60 as varchar(8)) + ':' + cast(total % 60 as varchar(2)) 
    from ( select  cast(sum(AR.[Travel Time] + AR.[Total Productive Time]) as int) as total from  dbo.vAction_Reg as AR) T) AS [Total Service Time] 
FROM   dbo.bldng INNER JOIN 
dbo.site ON dbo.bldng.site_id = dbo.site.site_id INNER JOIN 
dbo.incident INNER JOIN dbo.item ON dbo.incident.item_id = dbo.item.item_id INNER JOIN 
dbo.product ON dbo.item.product_id = dbo.product.product_id INNER JOIN 
dbo.sectn_dept ON dbo.incident.sectn_dept_id = dbo.sectn_dept.sectn_dept_id INNER JOIN 
dbo.inc_cat ON dbo.incident.inc_cat_id = dbo.inc_cat.inc_cat_id INNER JOIN 
dbo.inc_major ON dbo.inc_cat.inc_major_id = dbo.inc_major.inc_major_id INNER JOIN 
dbo.bldng_room ON dbo.incident.bldng_room_id = dbo.bldng_room.bldng_room_id ON dbo.bldng.bldng_id = dbo.bldng_room.bldng_id INNER JOIN 
dbo.prod_cls ON dbo.product.prod_cls_id = dbo.prod_cls.prod_cls_id  inner JOIN 
dbo.assyst_usr ON dbo.incident.ass_usr_id = dbo.assyst_usr.assyst_usr_id LEFT OUTER Join 
dbo.vAction_Reg on dbo.incident.incident_id=dbo.vAction_Reg.incident_id   inner JOIN 
dbo.act_reg ON dbo.incident.incident_id=dbo.act_reg.incident_id 

WHERE  
dbo.inc_major.inc_major_sc = 'PM' AND dbo.incident.date_logged >='6/19/2015' 
GROUP BY dbo.sectn_dept.sectn_sc , dbo.incident.date_logged,  dbo.incident.incident_ref, 
dbo.product.product_n,  dbo.item.item_n,  dbo.bldng_room.bldng_room_sc, dbo.assyst_usr.assyst_usr_n, 
dbo.incident.inc_status, dbo.act_reg.act_type_sc, dbo.incident.last_action_date, 
dbo.vAction_Reg.[Total Productive Time],dbo.vAction_Reg.[Travel Time] 

结果:

Customer Month Month Year PM_ref Product Item bldng_room_sc assyst_usr_n Last Action Status Attachmnet Total Service Time 
DIB 6 June 2015 64625 PC2150XE 123 ABC TRADING SM Hardy Colar 20-06-15 Resolved No 291193:46 
DIB 6 June 2015 64629 PC2100XE 345 ABC TRADING SM Hardy Colar 20-06-15 Resolved No 291193:46 
HSBC 6 June 2015 64615 PC2100XEUSB+CCDM 765 JUMEIRA BR-OPP SAFA PARK Fawad Shakeel 19-06-15 Resolved No 291193:46 
HSBC 6 June 2015 64616 PC2100XE+CCDM 787 JUMEIRA BR-OPP SAFA PARK Fawad Shakeel 19-06-15 Resolved No 291193:46 
UNB 6 June 2015 64626 C2070RL 7627 DHAFRA-BRANCH Hardy Colar 20-06-15 Resolved No 291193:46 

需要在下面的格式来显示总的服务时间:

Total Service Time 
1:02 
1:51 
1:03 
1:02 
3:31 

实际的表数据(Dtata类型=金钱)

Travel Time Total Productive Time 
1.00 61.00 
60.00 51.00 
2.00 61.00 
1.00 61.00 
180.00 31.00 

回答

0

我认为最简单的方法是刚刚做字符串操作:

select (right('00' + cast(floor(TotalTime/60) as varchar(255)), 2) + ':' + 
     right('00' + cast(floor(TotalTime % 60) as varchar(255)), 2) 
     ) 
+0

如果我改变像下面的查询,结果得到错误, – Salman

+0

(选择铸造(总/ 60为varchar(8))+ ':' +铸造(总%60为varchar(2)) \t \t \t \t来自(选择投票(总和(vAction_Reg。[旅行时间] + vAction_Reg。[总生产时间])作为整数)T)AS [总服务时间] – Salman

+0

如果值超过24小时,即行程时间= 2520.00和总生产时间= 10240.00那么结果应该在212:40 – Salman

0

如果你的SQL Server上,它可以很容易地使用CONVERT变成你想要的风格来完成:

SELECT CONVERT(varchar(5), DATEADD(ms, 120 * 1000, 0), 108) 

乘以1000改变成毫秒丢弃小数部分

输出将是:

00:02 
+0

请帮我如何实现在下面的查询部分,(选择强制转换(total/60 as varchar(8))+':'+ cast(total (合计)(vAction_Reg。[旅行时间] + vAction_Reg。[总生产时间])作为整数)作为varchar(2) T)AS [总服务时间] – Salman

+0

对结果使用CONVERT即可完成。 – Martin

相关问题