我再次需要您的帮助。 我有一张看起来像这样的桌子:
EventData[]
所以我希望输出总结开始时间和结束时间之间的差异。 在这种情况下,输出将如下所示,并且应该仅在几分钟内:
Hour_start | Minute_start | Second_start | Hour_end | Minute_end | Second_end
10 | 10 | 00 | 10 | 15 | 30
11 | 12 | 00 | 11 | 14 | 47
我使用来自外部应用程序的T-SQL(MS SQL Server),不允许我使用@declare之类的东西。我只能使用标准查询,例如选择,创建,删除等。
答案 0 :(得分:2)
第1步)解雇设计this table的人
步骤2)似乎做到了 1 :
def update
post = Post.find(params[:id])
if post.update_attributes(message: params[:message], picture:
params[:picture])
render_success(:ok, post, meta: { message: 'Post updated' })
else
render_error(422, post.errors, message: 'Failed to update post')
end
end
您可能会想将结果强制转换为declare @t table (Hour_start int, Minute_start int, Second_start int,
Hour_end int, Minute_end int, Second_end int)
insert into @t(Hour_start , Minute_start , Second_start ,
Hour_end , Minute_end , Second_end) values
(10 , 10 , 00 , 10 , 15 , 30),
(11 , 12 , 00 , 11 , 14 , 47)
;With Total as (
select
SUM(
DATEDIFF(second,
DATEADD(hour,hour_start,
DATEADD(minute,minute_start,
DATEADD(second,second_start,
CONVERT(time,'00:00:00')))),
DATEADD(hour,hour_end,
DATEADD(minute,minute_end,
DATEADD(second,second_end,
CONVERT(time,'00:00:00')))))
) as Seconds
from
@t
)
select
CONVERT(varchar(10),Seconds/60) + ':' +
RIGHT('00' + CONVERT(varchar(10),Seconds%60),2)
from Total
(应该首先在表中使用的类型)。不要这样time
表示一天中的时间。结果是一个时间跨度。这是两个截然不同的(虽然很相关)的概念。
也许会有更快的方法来将这些列转换为time
,但是我更喜欢显式的time
,这使我们在做什么变得更清楚。
1 是的,此脚本中有一个CONVERT
,您已经说过这是不允许的,但这只是为了使脚本自包含且可运行。 declare
和declare
只是在设置您的示例数据。
答案 1 :(得分:1)
如果MS SQL SERVER版本为2012或更高版本,则可以使用TIMEFROMPARTS
查找时间,也可以使用DATEDIFF
查找差异。
CREATE TABLE #Times
(
Hour_start INT
,Minute_start INT
,Second_start INT
,Hour_end INT
,Minute_end INT
,Second_end INT
)
INSERT INTO #Times VALUES
(10,10,00,10,15,30)
,(11,12,00,11,14,47)
SELECT TIMEFROMPARTS(Hour_start,Minute_start,Second_start,0,0) StartTime
,TIMEFROMPARTS(Hour_end,Minute_end,Second_end,0,0) EndTime
,DATEDIFF(MINUTE,TIMEFROMPARTS(Hour_start,Minute_start,Second_start,0,0),TIMEFROMPARTS(Hour_end,Minute_end,Second_end,0,0)) TimeDifference
FROM #Times
答案 2 :(得分:0)
如果您以秒为单位进行时间数学运算,而没有内置任何SQL日期时间函数,并且假设两个时间都在同一天。
select
concat(
CAST(diffinSeconds/60 as Nvarchar(max)),
':',
CAST(diffinseconds%60 as nvarchar(max)))
from
(
select diffinSeconds=
SUM(
(Hour_end - Hour_start) *3600 +
(Minute_end-Minute_start) *60 +
(Second_end-Second_start)
)
from yourtable
)t
答案 3 :(得分:0)
我的查询也找到了小时。
CREATE TABLE [dbo].[Startstop](
[Hour_start] [int] NULL,
[Minute_start] [int] NULL,
[Second_start] [int] NULL,
[Hour_end] [int] NULL,
[Minute_end] [int] NULL,
[Second_end] [int] NULL
)
insert Startstop(Hour_start , Minute_start , Second_start ,
Hour_end , Minute_end , Second_end) values
(10 , 10 , 00 , 10 , 15 , 30),
(11 , 12 , 00 , 11 , 14 , 47)
declare @TempTable Table (TotalSecond int,Hour int)
insert @TempTable
select sum((((Hour_end *3600)+(Minute_end * 60)+Second_end) - ((Hour_start *3600)+
(Minute_start * 60)+Second_Start)))
,sum((((Hour_end *3600)+(Minute_end * 60)+Second_end) - ((Hour_start *3600)+
(Minute_start * 60)+Second_Start))/3600) Hour
from Startstop
select Hour, (TotalSecond-(Hour* 3600)) /60 Minute , TotalSecond - (Hour *3600) -
((((TotalSecond-(Hour* 3600)) /60))*60) Second
from @TempTable
我正在使用2008