Sql 如何以特定格式对周期时间集求和
如果我有这样的结果集:Sql 如何以特定格式对周期时间集求和,sql,sql-server,datetime,sql-server-2012,Sql,Sql Server,Datetime,Sql Server 2012,如果我有这样的结果集: Work_hour(hh:mm) 10:24 12:59 06:28 如何用相同的格式计算这些小时和分钟的总和?试试这个- 查询: DECLARE @temp TABLE ( work_hour CHAR(5) ) INSERT INTO @temp (work_hour) VALUES ('10:24'), ('12:59'), ('06:28') ;WITH cte AS ( SELECT mn = SUM(DA
Work_hour(hh:mm)
10:24
12:59
06:28
如何用相同的格式计算这些小时和分钟的总和?试试这个- 查询:
DECLARE @temp TABLE
(
work_hour CHAR(5)
)
INSERT INTO @temp (work_hour)
VALUES
('10:24'),
('12:59'),
('06:28')
;WITH cte AS
(
SELECT mn = SUM(DATEDIFF(MINUTE, '19000101', CAST('19000101 ' + work_hour AS DATETIME)))
FROM @temp
)
SELECT CAST(FLOOR(mn / 60) AS VARCHAR(5)) + ':' + CAST(mn % 60 AS VARCHAR(2))
FROM cte
hm
--------
29:51
DECLARE @temp TABLE
(
transtime_out DATETIME
, transtime_in DATETIME
)
INSERT INTO @temp (transtime_out, transtime_in)
VALUES
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000'),
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000')
SELECT diff = LEFT(CONVERT(VARCHAR(10), CAST(SUM(CAST(a.transtime_out - a.transtime_in AS FLOAT)) AS DATETIME), 108), 5)
FROM @temp a
输出:
DECLARE @temp TABLE
(
work_hour CHAR(5)
)
INSERT INTO @temp (work_hour)
VALUES
('10:24'),
('12:59'),
('06:28')
;WITH cte AS
(
SELECT mn = SUM(DATEDIFF(MINUTE, '19000101', CAST('19000101 ' + work_hour AS DATETIME)))
FROM @temp
)
SELECT CAST(FLOOR(mn / 60) AS VARCHAR(5)) + ':' + CAST(mn % 60 AS VARCHAR(2))
FROM cte
hm
--------
29:51
DECLARE @temp TABLE
(
transtime_out DATETIME
, transtime_in DATETIME
)
INSERT INTO @temp (transtime_out, transtime_in)
VALUES
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000'),
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000')
SELECT diff = LEFT(CONVERT(VARCHAR(10), CAST(SUM(CAST(a.transtime_out - a.transtime_in AS FLOAT)) AS DATETIME), 108), 5)
FROM @temp a
更新2:
DECLARE @temp TABLE
(
work_hour CHAR(5)
)
INSERT INTO @temp (work_hour)
VALUES
('10:24'),
('12:59'),
('06:28')
;WITH cte AS
(
SELECT mn = SUM(DATEDIFF(MINUTE, '19000101', CAST('19000101 ' + work_hour AS DATETIME)))
FROM @temp
)
SELECT CAST(FLOOR(mn / 60) AS VARCHAR(5)) + ':' + CAST(mn % 60 AS VARCHAR(2))
FROM cte
hm
--------
29:51
DECLARE @temp TABLE
(
transtime_out DATETIME
, transtime_in DATETIME
)
INSERT INTO @temp (transtime_out, transtime_in)
VALUES
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000'),
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000')
SELECT diff = LEFT(CONVERT(VARCHAR(10), CAST(SUM(CAST(a.transtime_out - a.transtime_in AS FLOAT)) AS DATETIME), 108), 5)
FROM @temp a
试试这个-
查询:
DECLARE @temp TABLE
(
work_hour CHAR(5)
)
INSERT INTO @temp (work_hour)
VALUES
('10:24'),
('12:59'),
('06:28')
;WITH cte AS
(
SELECT mn = SUM(DATEDIFF(MINUTE, '19000101', CAST('19000101 ' + work_hour AS DATETIME)))
FROM @temp
)
SELECT CAST(FLOOR(mn / 60) AS VARCHAR(5)) + ':' + CAST(mn % 60 AS VARCHAR(2))
FROM cte
hm
--------
29:51
DECLARE @temp TABLE
(
transtime_out DATETIME
, transtime_in DATETIME
)
INSERT INTO @temp (transtime_out, transtime_in)
VALUES
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000'),
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000')
SELECT diff = LEFT(CONVERT(VARCHAR(10), CAST(SUM(CAST(a.transtime_out - a.transtime_in AS FLOAT)) AS DATETIME), 108), 5)
FROM @temp a
输出:
DECLARE @temp TABLE
(
work_hour CHAR(5)
)
INSERT INTO @temp (work_hour)
VALUES
('10:24'),
('12:59'),
('06:28')
;WITH cte AS
(
SELECT mn = SUM(DATEDIFF(MINUTE, '19000101', CAST('19000101 ' + work_hour AS DATETIME)))
FROM @temp
)
SELECT CAST(FLOOR(mn / 60) AS VARCHAR(5)) + ':' + CAST(mn % 60 AS VARCHAR(2))
FROM cte
hm
--------
29:51
DECLARE @temp TABLE
(
transtime_out DATETIME
, transtime_in DATETIME
)
INSERT INTO @temp (transtime_out, transtime_in)
VALUES
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000'),
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000')
SELECT diff = LEFT(CONVERT(VARCHAR(10), CAST(SUM(CAST(a.transtime_out - a.transtime_in AS FLOAT)) AS DATETIME), 108), 5)
FROM @temp a
更新2:
DECLARE @temp TABLE
(
work_hour CHAR(5)
)
INSERT INTO @temp (work_hour)
VALUES
('10:24'),
('12:59'),
('06:28')
;WITH cte AS
(
SELECT mn = SUM(DATEDIFF(MINUTE, '19000101', CAST('19000101 ' + work_hour AS DATETIME)))
FROM @temp
)
SELECT CAST(FLOOR(mn / 60) AS VARCHAR(5)) + ':' + CAST(mn % 60 AS VARCHAR(2))
FROM cte
hm
--------
29:51
DECLARE @temp TABLE
(
transtime_out DATETIME
, transtime_in DATETIME
)
INSERT INTO @temp (transtime_out, transtime_in)
VALUES
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000'),
('2013-05-19 16:40:53.000', '2013-05-19 08:58:07.000')
SELECT diff = LEFT(CONVERT(VARCHAR(10), CAST(SUM(CAST(a.transtime_out - a.transtime_in AS FLOAT)) AS DATETIME), 108), 5)
FROM @temp a
其中,time\u column是表中的列,table1是表的名称。例如:
create table table1 (
time_column varchar(10)
);
insert into table1 (time_column) values ('12:20'), ('10:40'), ('15:50');
结果:38:50
其中,time\u column是表中的列,table1是表的名称。例如:
create table table1 (
time_column varchar(10)
);
insert into table1 (time_column) values ('12:20'), ('10:40'), ('15:50');
结果是:38:50
SUM(DATEDIFF(分钟,'19000101',CAST('19000101'+左(转换(VARCHAR(10),a.transtime_out-a.transtime_in,108),5)AS DATETIME))
返回564165
我在heikim写下整个查询,我试图得到的和(两个字段之间的差)就像你在上一个问题中解释的那样,但是没有用。这是真的吗:CAST(FLOOR(SUM)(DATEDIFF(MINUTE,'19000101',CAST('19000101')+LEFT(CONVERT(VARCHAR(10),a.transtime_out-a.transtime_in,108),5)AS DATETIME))/60)AS VARCHAR(5))+':'+CAST(SUM(DATEDIFF(MINUTE,'19000101',CAST('19000101'+LEFT(CONVERT(VARCHAR(10),a.transtime_out-a.transtime_in,108),5)作为DATETIME(日期时间))%60作为VARCHAR(2))
我得到的是03:03
,这是错误的我的数据如下:trans_in::2013-05-14 10:23:18.000 2013-05-15 08:19:32.000 2013-05-16 08:53:29.000
和,a.transtime_out-a.transtime_in,108),5)AS DATETIME())
return564165
我写了整个查询@heikkim,我试图得到(两个字段之间的差异)的总和,就像你在上一个问题中解释的那样,但没有结果。这是真的:CAST(FLOOR)(sum(DATEDIFF)(分钟,'19000101',CAST('19000101')+左(CONVERT)(VARCHAR(10),a.transtime_out-a.transtime_in,108),5)AS DATETIME(作为日期时间))/60)AS VARCHAR(5))+':'+CAST(SUM(DATEDIFF(MINUTE,'19000101',CAST('19000101'+LEFT(CONVERT(VARCHAR(10),a.transtime_out-a.transtime_in,108),5)AS DATETIME))%60 AS VARCHAR(2))
我得到了03:03
这是错误的,我的数据是这样的:trans_in::2013-05-1410:23:18.000 2013-05-15 08:19:32.000 2013-05-16 08:53:29.000
选择不同的b.schu名称,a.day_标志vac,c.modified,CAST(地板(TMP1.MINS/60)作为VARCHAR)+':'+CAST((TMP1.MINS%60)作为VARCHAR)FROM(选择SUM)(左(转换(VARCHAR(10),a.transtime_out-a.transtime_in,108),5),2)为INT)*60+转换(右(左(转换(VARCHAR(10),a.transtime_out-a.transtime_in,108),5),2)为INT)为[dbo]的分钟。[加班计算]a)为[dbo]的TMP1。[计算]内部连接[dbo].[Sch]b在a.Sch\U id=b.Sch\U id内部连接[dbo]上。[检查]c在a.userid=c.userid上,其中a.emp_num=3266和a.trans_日期介于'2013-05-14'和'2013-05-18'之间,由a.day_标志、b.Sch_名称、c.modified
在附近出现错误。您能创建SQL小提琴吗()使用一些示例数据从您的模式进行演示?我现在知道了,您正在尝试实现什么。选择不同的b.Sch_名称、a.day_标志vac、c.modified、CAST(FLOOR(TMP1.MINS/60)AS VARCHAR)+':'+CAST((TMP1.MINS%60)AS VARCHAR)from(选择SUM(CAST)(左(CONVERT(VARCHAR(10)、a.transtime_out-a.transtime_in,108)、5)、2)AS INT)*60+从[dbo]转换为分钟(从[dbo]。[calc]转换为TMP1从[dbo]。[calc]转换为内部联接[dbo]。[Sch]b在a.Sch_id=b.Sch_id内部联接[dbo]。[CHECK]c
在a.userid=c.userid上,其中a.emp_num=3266和a.trans_日期介于'2013-05-14'和'2013-05-18'之间,由a.day_标志、b.Sch_名称、c.modified
我在附近遇到错误。您能从您的模式中创建一个SQL Fiddle()演示并使用一些示例数据吗?我现在明白了,您正在尝试实现什么。