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”之间分成不同的行?哦……这就是您想要的。您需要原始两列表中的一种透视。它可能有助于向我们显示实际原始表的外观。时间戳列从何而来尚不清楚。请给我们一个清晰的可复制的输入表样本。