SQL Server、DATEDIFF在不同的行中生成结果

SQL Server、DATEDIFF在不同的行中生成结果,sql,sql-server,datetime,Sql,Sql Server,Datetime,您能帮我解答有关datediff函数的问题吗 我应该根据小时数将返回结果移动到新行中。 以下是表格示例: declare @t table (recid int,datefrom smalldatetime, dateto smalldatetime, diff int) insert into @t values (1,CURRENT_TIMESTAMP - 0.2, CURRENT_TIMESTAMP, datediff (MINUTE,CURRENT_TIMESTAMP - 0.2, C

您能帮我解答有关
datediff
函数的问题吗

我应该根据小时数将返回结果移动到新行中。 以下是表格示例:

declare @t table (recid int,datefrom smalldatetime, dateto smalldatetime, diff int) 
insert into @t values (1,CURRENT_TIMESTAMP - 0.2, CURRENT_TIMESTAMP, datediff (MINUTE,CURRENT_TIMESTAMP - 0.2, CURRENT_TIMESTAMP))
insert into @t values (2,CURRENT_TIMESTAMP - 0.4, CURRENT_TIMESTAMP,datediff  (MINUTE,CURRENT_TIMESTAMP - 0.4, CURRENT_TIMESTAMP))
insert into @t values (3,CURRENT_TIMESTAMP - 0.5, CURRENT_TIMESTAMP,datediff  (MINUTE,CURRENT_TIMESTAMP - 0.5, CURRENT_TIMESTAMP))
insert into @t values (4,CURRENT_TIMESTAMP - 1, CURRENT_TIMESTAMP,datediff  (MINUTE,CURRENT_TIMESTAMP - 1, CURRENT_TIMESTAMP))
select * from @t
返回结果应采用下一种格式:

recid datefrom              dateto              TimeStamp           ToNewHourMinutes
1     2015-12-30 08:44:00   2015-12-30 13:32:00 2015-12-30 08:44:00 16
1     2015-12-30 08:44:00   2015-12-30 13:32:00 2015-12-30 09:00:00 60
1     2015-12-30 08:44:00   2015-12-30 13:32:00 2015-12-30 10:00:00 60
1     2015-12-30 08:44:00   2015-12-30 13:32:00 2015-12-30 11:00:00 60
1     2015-12-30 08:44:00   2015-12-30 13:32:00 2015-12-30 12:00:00 60
1     2015-12-30 08:44:00   2015-12-30 13:32:00 2015-12-30 13:32:00 28
...

非常感谢你的帮助

不清楚结果集中出现的
datetime
列是从哪里来的。但是,如果您的问题是如何获得到下一个小时的分钟数,则
DATEPART()
函数将派上用场:

SELECT datetime, 60 - DATEPART(minute, datetime) AS Minutes
FROM your_table

我不知道这是否是您需要的,但您可以尝试以下方式:

declare @datefrom datetime
declare @dateto datetime
declare @minutes int
declare @temptime datetime
set @datefrom = '2015-12-30 10:25'
set @dateto = '2015-12-30 12:40'
select @temptime = @datefrom
select @minutes = 60 - datepart(minute, @temptime)
create table #temp
(
    [date] datetime,
    Minutes INT
)
while (datediff(minute,@temptime,@dateto)) > 60
begin
insert into #temp
select @temptime, @minutes

select @temptime = dateadd(hh,1,convert(char(14),@temptime,121)+'00:00') 
select @minutes = 60 - datepart(minute, @temptime)
end
insert into #temp 
select @dateto, 60 - datepart(minute, @dateto)

select * from #temp

drop table #temp
输出

date                    Minutes
2015-12-30 10:25:00.000 35
2015-12-30 11:00:00.000 60
2015-12-30 12:40:00.000 20

不清楚,从哪里开始?这一行的起始位置:
2015-12-30 11:00 60
?是谁把这个问题添加到收藏夹的?这应该是一个返回结果。例如,我有一个范围(在两个日期时间之间)。问题是如何将此结果拆分为若干行。结果应为多行。例如,2015-12-30 10:25的datepart为35分钟(您的反馈是正确的),但我如何将结果在“2015-12-30 10:25”和“2015-12-30 12:40”之间分成不同的行?哦……这就是您想要的。您需要原始两列表中的一种透视。它可能有助于向我们显示实际原始表的外观。时间戳列从何而来尚不清楚。请给我们一个清晰的可复制的输入表样本。