2015-12-30 4 views
0

Не могли бы вы помочь мне с вопросом, связанным с функцией datediff?SQL Server, 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 
... 

Большое спасибо за помощь.

+1

мутноватый, откуда пришедшего минут? Откуда эта строка: '2015-12-30 11:00 60'? –

+0

Серьезно, кто добавил этот вопрос в избранное? –

+0

Это должно быть как результат возврата. например, у меня есть диапазон (между двумя датами). Вопрос заключался в том, как разделить этот результат на несколько рядов строк. – Key

ответ

0

Неясно, откуда находится столбец datetime, который отображается в вашем результирующем наборе. Однако, если ваш вопрос заключается в том, чтобы получить минут до следующего часа, функция DATEPART() пригодится:

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

Результат должен быть в серверных строках. например 2015-12-30 10:25 datepart за 35 минут (ваши отзывы это правильно), но как я могу разделить результат между '2015-12-30 10:25' и '2015-12-30 12:40' в разных строках? – Key

+0

О, это то, чего ты хочешь. Вам нужна своя позиция из исходной таблицы с двумя столбцами. –

+0

exacly :)), спасибо! – Key

0

Я не знаю, если это то, что вам нужно, но вы можете попробовать что-то вроде:

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 
Смежные вопросы