Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何以特定格式对周期时间集求和_Sql_Sql Server_Datetime_Sql Server 2012 - Fatal编程技术网

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())
return
564165
我写了整个查询@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()演示并使用一些示例数据吗?我现在明白了,您正在尝试实现什么。