Календарь для хранилища данных на основе MS SQL

добавлено: 24 янв 12
понравилось:0
просмотров: 3514
комментов: 4

теги:

Автор: Критик

Парочка скритов для объектов, необходимых в каждом хранилище

ALTER view [dbo].[V_Время]
as
select convert(tinyint,Час) as Час,
       right('0' + convert(varchar(2), Час),2)+':00 - ' + right('0' + convert(varchar(2), Час),2) + ':59' as Время,

       cast(case
         when Час between  0 and  5 then 1
         when Час between  6 and 11 then 2
         when Час between 12 and 17 then 3
         when Час between 18 and 23 then 4
       end as tinyint) as ВремяСутокДляСортировки,

       cast(case
         when Час between  0 and  5 then 'Ночь'
         when Час between  6 and 11 then 'Утро'
         when Час between 12 and 17 then 'День'
         when Час between 18 and 23 then 'Вечер'        
       end as varchar(10)) as ВремяСуток

  from (select top 24 ROW_NUMBER() over(ORDER BY number)-1 as Час from master.dbo.spt_values) as x
GO


ALTER view [dbo].[ДляЗаполнениеДат]
as

select CONVERT(smalldatetime,День) as Дата,
       convert(varchar(10),День,104) as День,
       
       case datepart(mm,День)
         when 1 then 'январь'
         when 2 then 'февраль'
         when 3 then 'март'
         when 4 then 'апрель'
         when 5 then 'май'
         when 6 then 'июнь'
         when 7 then 'июль'
         when 8 then 'август'
         when 9 then 'сентябрь'
         when 10 then 'октябрь'
         when 11 then 'ноябрь'
         when 12 then 'декабрь'
       end Месяц,
       datepart(yy,День)*100+
       datepart(mm,День) as Ключ_Месяца,
       case lower(datename(weekday,День))
         when 'monday'    then 'понедельник'
         when 'tuesday'   then 'вторник'
         when 'wednesday' then 'среда'
         when 'thursday'  then 'четверг'
         when 'friday'    then 'пятница'
         when 'saturday'  then 'суббота'
         when 'sunday'    then 'воскресенье'
         else lower(datename(weekday,День))
       end as ДеньНедели,
       case lower(datename(weekday,День))
         when 'monday'    then 1
         when 'tuesday'   then 2
         when 'wednesday' then 3
         when 'thursday'  then 4
         when 'friday'    then 5
         when 'saturday'  then 6
         when 'sunday'    then 7
       end as НомерДняНедели,
       datepart(yy, День) as Год,
       datepart(yy, День) + case
                              when datepart(isowk, День) = 1 and month(День) = 12 then 1
                              when datepart(isowk, День) in (52,53) and month(День) = 1 then -1
                              else 0
                            end as ГодДляНедель,
       datepart(yy, День)*1000 + case
                                   when datepart(isowk, День) = 1 and month(День) = 12 then 1000
                                   when datepart(isowk, День) in (52,53) and month(День) = 1 then -1000
                                   else 0
                                 end + datepart(isowk, День) as Ключ_Недели,

       convert(varchar(20), datepart(isowk, День)) + ' неделя' as Неделя,

       datepart(yy,День)*10 + datepart(qq, День) as Ключ_Квартала,
       convert(varchar(20), datepart(qq, День))+' кв.' as Квартал,

       1. / datediff(dd, День - DAY(День), dateadd(month,1,День)-DAY(dateadd(month,1,День))) as ДоляМесяца

  from (-- дни
        select convert(datetime, 39081 + (ROW_NUMBER() over(ORDER BY number)-1)) as День from master.dbo.spt_values
       ) as t1

Комментарии


  • Это только для 2008?
    У меня datepart(isowk, не понимает в 2005

  • isowk появился в только 2008 версии, можно заменить на wk (хотя конечно это будет несколько не то) или доработать скрипт руками.

  • Добрый день, Коллеги!

    У себя на сайте в разделе справочников можно взять готовый xls файл, а также есть скрипты MSSQL и Oracle

    http://www.dvbi.ru

  • 21 марта 2016, 16:06 serg1974serg1974

    Огромное спасибо!!! Вам за процедуру "ДляЗаполнениеДат"
    успешно работает уже 3 года в кубе



Необходимо войти на сайт, чтобы оставлять комментарии