Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Интервал дат  [new]
15012014
Guest
Здравствуйте !!!
Помогите пожалуйста с проблемой.
Есть табличка в которой хранятся дни месяца. Нужно составить строку с перечислением этих дней, но не просто с перечислением, а с интервалами
declare @Tmp table(ADay int)

insert into @Tmp
select 1 union
select 2 union
select 3 union
select 6 union
select 10 union
select 11 union
select 12

select * 
from @Tmp
-- нужно получить строку вида "1-3,6,10-12"
15 янв 14, 10:17    [15416935]     Ответить | Цитировать Сообщить модератору
 Re: Интервал дат  [new]
Добрый Э - Эх
Guest
По сути, задача твоя - два баяна: первый - поиск непрерывно следующих дат, второй - "суммирование" текстовых строк.
Для решения первого баяна искать на форуме по словам "инвариант", "grp_id". Второй баян есть в Ф.А.К.-е
15 янв 14, 10:22    [15416972]     Ответить | Цитировать Сообщить модератору
 Re: Интервал дат  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
declare @Tmp table(ADay int)

insert into @Tmp
select 1 union
select 2 union
select 3 union
select 6 union
select 10 union
select 11 union
select 12

select '"' + stuff( 
(
select ',' + cast( min(Aday) as varchar ) 
           + case when min(Aday) = max(Aday) 
                  then '' 
                  else '-' + cast( max(Aday) as varchar ) 
             end
           + ' '
  from (  select *,  ADay - row_number() over (order by ADay) as flag
            from @Tmp
       ) t
  group by flag
  for xml path('')
)
, 1, 1, '') + '"' as [нужно получить строку вида]
15 янв 14, 10:28    [15417001]     Ответить | Цитировать Сообщить модератору
 Re: Интервал дат  [new]
15012014
Guest
Спасибо ОГРОМНОЕ !!!
15 янв 14, 10:43    [15417099]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить