Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Прибавить время  [new]
Tdmitry
Member

Откуда: Москва
Сообщений: 78
Добрый день всем!
подскажите пожалуйста, как это оформить

есть 3 столбца типа int : start_time (например 900), end_time (например 1800), duree (например 40)
нужно получить список вида
9:00, 9:40, 10:20, 11:00 и т.д.
24 июн 13, 15:26    [14474660]     Ответить | Цитировать Сообщить модератору
 Re: Прибавить время  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Tdmitry
Добрый день всем!
подскажите пожалуйста, как это оформить

есть 3 столбца типа int : start_time (например 900), end_time (например 1800), duree (например 40)
нужно получить список вида
9:00, 9:40, 10:20, 11:00 и т.д.

SELECT LEFT(start_time,LEN(start_time)-2)+':'+RIGHT(start_time,2)
24 июн 13, 15:34    [14474748]     Ответить | Цитировать Сообщить модератору
 Re: Прибавить время  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
declare @start_time time = '9:00', @end_time time = '18:00', @duree int = 40

;with cte as (
   select @start_time as tm
   union all
   select tm
     from (select dateadd(mi, @duree, tm) tm from cte) t
    where tm <= @end_time
)
select * from cte
дальше напильником
24 июн 13, 15:37    [14474775]     Ответить | Цитировать Сообщить модератору
 Re: Прибавить время  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 216
Tdmitry,

;with cte (t) as
(
  select dateadd(hh, start_time / 100, cast('00:00:00' as time)) as t from #tt
  union all
  select dateadd(mi, duree, t) as t from #tt, cte where t < (select dateadd(mi, end_time / 100 * 60 - duree, cast('00:00:00' as time)))
)
select cast(t as varchar(5)) from cte
24 июн 13, 15:59    [14474993]     Ответить | Цитировать Сообщить модератору
 Re: Прибавить время  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
а вообще, версия сервера какая?:)

SELECT @VERSION
24 июн 13, 16:07    [14475067]     Ответить | Цитировать Сообщить модератору
 Re: Прибавить время  [new]
Tdmitry
Member

Откуда: Москва
Сообщений: 78
всем боьшое спасибо! щас я попробую осознать это
версия
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
24 июн 13, 16:11    [14475102]     Ответить | Цитировать Сообщить модератору
 Re: Прибавить время  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Tdmitry
всем боьшое спасибо! щас я попробую осознать это
версия
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

А, ну тогда получится исползовать оба примера с CTE.
24 июн 13, 16:13    [14475114]     Ответить | Цитировать Сообщить модератору
 Re: Прибавить время  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
ну и еще довесок:) (скобки факультативно)
with tab1(start_time, end_time, duree) as (select 900,1800,40)
select convert(time,dateadd(MINUTE,st+v.number*dt,0))
from tab1 t
cross apply (select  
   start_time/100*60+start_time%100 st,
   end_time/100*60+end_time%100 et,
   duree/100*60+duree%100 dt
   ) c
join master..spt_values v on v.type='P' and v.number<=(et-st)/dt
24 июн 13, 16:14    [14475124]     Ответить | Цитировать Сообщить модератору
 Re: Прибавить время  [new]
Tdmitry
Member

Откуда: Москва
Сообщений: 78
ок, спасибо) буду вникать, что такое cte и cross
24 июн 13, 16:16    [14475147]     Ответить | Цитировать Сообщить модератору
 Re: Прибавить время  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Tdmitry
ок, спасибо) буду вникать, что такое cte и cross

Здесь про APPLY
Здесь по CTE
24 июн 13, 16:24    [14475215]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить