gpt4 book ai didi

sql - 如何对 varchar 列中存储的时间跨度求和?

转载 作者:行者123 更新时间:2023-12-02 21:22:50 26 4
gpt4 key购买 nike

我在 MS SQL-Server 中有一个表,其中 varchar 列中有小时。对于前。 '4:30'(小时:分钟)。基本上,它是一定量工作的时间跨度。现在我需要该列的总和。如何转换?

我的 table 是这样的

Create table tblWrkingHors
(
Id int primary key,
name varchar(50),
WorkingHr varchar(8)
)

我的表数据是这样的

==============================================================
Id name WorkingHr
1 sam 08:20
2 sam 04:50
3 sam 04:34
4 Pam 05:50
5 sam 04:30
6 Pam 06:40
7 Pam 04:50
8 Todd 06:10
9 Todd 05:50
10 Todd 08:50

最佳答案

VARCHAR 可能不是存储时间的最有效版本,但通过一些转换,您可以做您想要的事情;

WITH cte AS (
SELECT name, SUM(DATEDIFF(MINUTE, '00:00', CAST(WorkingHr AS TIME))) t
FROM mytable GROUP BY name
)
SELECT name, RTRIM(t/60) + ':' + RIGHT('0' + RTRIM(t%60), 2) FROM cte

An SQLfiddle to test with .

它的基本作用是将字符串转换为 TIME,然后使用 DATEDIFF 将时间转换为分钟。然后它只是基本上总结每个名字的分钟数。

外部查询仅使用简单的字符串操作将分钟转换为 HH:MM 字符串。

如果您不想按名称分组,则查询可以简化为:

WITH cte AS (
SELECT SUM(DATEDIFF(MINUTE, '00:00', CAST(WorkingHr AS TIME))) t FROM mytable
)
SELECT RTRIM(t/60) + ':' + RIGHT('0' + RTRIM(t%60), 2) FROM cte;

...这与没有分组的查询几乎相同。

关于sql - 如何对 varchar 列中存储的时间跨度求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26316216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com