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

Откуда: Stk
Сообщений: 30
Добрый день!

Подскажите как можно исправить запрос.

SELECT TOP 100
      [DateTime],
	  CAST(CASE WHEN DateTime BETWEEN '2017-11-12 07:00:00.000' AND '2017-11-12 19:00:00.000' THEN 2 ELSE 1 END as int) as Smen
  FROM [CMI1].[dbo].[Table2]
  where (DateTime BETWEEN '2017-11-12' AND '2017-11-13')
  order by [DateTime] desc

результат:
DateTime Smen
2017-11-12 23:53:43.9671
......
2017-11-12 16:34:17.8902
......
2017-11-12 05:58:40.2171

PS. многоточие, множество данных

Данный запрос работает только на текущую дату, но если задать диапазон за 2 или более дня, то в CAST уже не будет работать ограничение с 7 до 19 часов. Нужно чтобы в столбец Smen записывалась 2 если дата в диапазоне с 7 до 19 и 1 если дата вне этого диапазона.
14 ноя 17, 07:39    [20951272]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных в диапазоне  [new]
aleks222
Guest
SELECT TOP 100
      [DateTime],
	  CAST(CASE WHEN cast( DateTime as time ) BETWEEN '07:00:00.000' AND '19:00:00.000' THEN 2 ELSE 1 END as int) as Smen
  FROM [CMI1].[dbo].[Table2]
  where (DateTime BETWEEN '2017-11-12' AND '2017-11-13')
  order by [DateTime] desc
14 ноя 17, 07:49    [20951276]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных в диапазоне  [new]
Etamin419
Member

Откуда: Stk
Сообщений: 30
оказалось все просто) Спасибо большое.
... надо идти больше курить sql мануал)


PS: наш сервер 2005, и он не поддерживал DateTime as time
заменил так, вдруг у кого такая же ошибка будет.
CAST(CASE WHEN CONVERT(varchar(8), DateTime, 108) BETWEEN '07:00:00.000' AND '19:00:00.000' THEN 2 ELSE 1 END as int) as Smen
14 ноя 17, 08:21    [20951301]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных в диапазоне  [new]
IDVT
Member

Откуда:
Сообщений: 313
Declare @BeginDate DateTime = '20170101'
      , @EndDate   DateTime = '20170101'

select top 100
       DateTime
     , case when DatePart( Hour
                         , DateAdd( Hour
                                  , -7
                                  , DateTime )) < 12 
           then 1 else 2 end as ChangeOfJob
from table1
where DateTime >= @BeginDate
      and DateTime <= @EndDate
14 ноя 17, 10:55    [20951731]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить