Цель : Sql, применяющий слово в Datetime, где этаж не является стандартным, например, каждые 2 часа, каждые 3 дня.Вместо стандартного каждый час, каждый день и т. Д.
общего назначения : включить сравнение данных для каждого периода сбора.когда период сбора превышает стандартную единицу времени.Сохраняя преимущества типа Datetime.
Пример преобразования:
этаж дата-время до 2 часов
+==========================+=======================+
| WhenCreated | Time_Slot |
+==========================+=======================+
| 2019-02-28 00:34:00 | 2019-02-28 00:00:00 |
+--------------------------+-----------------------+
| 2019-02-28 01:34:00 | 2019-02-28 00:00:00 |
+--------------------------+-----------------------+
| 2019-02-28 02:00:00 | 2019-02-28 02:00:00 |
+--------------------------+-----------------------+
| 2019-02-28 02:20:00 | 2019-02-28 02:00:00 |
+--------------------------+-----------------------+
| 2019-02-28 03:59:00 | 2019-02-28 02:00:00 |
+--------------------------+-----------------------+
ТекущийРешение:
внутри оператора выбора создаст новый столбец [Time_Slot] на основе [WhenCreated]:
left(convert(varchar(30), WhenCreated, 102),4) + '-' + left(right(convert(varchar(30), WhenCreated, 102),5),2) + '-' + right(convert(varchar(30), WhenCreated, 102),2) + ' ' +
case
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('00','01') then '00:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('02','03') then '02:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('04','05') then '04:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('06','07') then '06:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('08','09') then '08:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('10','11') then '10:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('12','13') then '12:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('14','15') then '14:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('16','17') then '16:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('18','19') then '18:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('20','21') then '20:00:00.000'
when left(cast(cast(WhenCreated as time) as varchar(30)),2) in ('22','23') then '22:00:00.000'
end as [Time_Slot]
Текущий вызов: Текущее решениеработает, но это грязно.Должен быть более простой метод.Итак, что является лучшим способом сделать это?
Редактировать: исправлена ошибка в таблице.