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

Откуда:
Сообщений: 36
Всем Доброго времени суток.
Подскажите как написать запрос.
Есть таблица с продажами где дата продажи храниться в формати DATETIME (2014-02-03 18:21:00.000)
Нужно посчитать количество этих продаж за определенны период дат (с 2014-02-01 по 2014-02-20)
и при этом за каждый день считать продажи только те которые попадают в промежуток времени с 11:00 до 17:30.
Просто отфильтровать по дате я знаю как:
SELECT COUNT(*)
FROM   SALES as s with(nolock)
WHERE s.SLS_MONEY >= '2014-02-01'
	   AND s.SLS_MONEY < '2014-02-20'

а вот как теперь еще исключить те у которых время не попадает в нужный диапазо?
На рисунке отмечены те строки которые не должны попасть в выборку, так как желтые с меньшим временем, а зеленые с большим

К сообщению приложен файл. Размер - 23Kb
24 апр 14, 19:24    [15931713]     Ответить | Цитировать Сообщить модератору
 Re: Отобрать с учетом времени  [new]
invm
Member

Откуда: Москва
Сообщений: 9405
and cast(s.SLS_MONEY as time) between '11:00' and '17:30'
24 апр 14, 20:04    [15931915]     Ответить | Цитировать Сообщить модератору
 Re: Отобрать с учетом времени  [new]
o-o
Guest
anrrry,
для 2008 и выше можно откастить в time (индексы отдыхают)
+ если за 20-ое число надо, то в условие на дату вставьте 21-ое
declare @SALES table (sales_id int, sls_money datetime);
insert into @SALES values
(1, '20140205 14:31:00'),
(2, '20140205 17:31:00'),
(3, '20140209 10:56:00'),
(4, '20140209 11:00:00'),
(5, '20140220 11:00:00')

SELECT *
FROM  @SALES as s 
WHERE s.SLS_MONEY >= '20140201' AND s.SLS_MONEY < '20140221'
      and cast(sls_money as time) between '11:00'and '17:30'
------------------------------
sales_id	sls_money
1	2014-02-05 14:31:00.000
4	2014-02-09 11:00:00.000
5	2014-02-20 11:00:00.000
24 апр 14, 20:06    [15931921]     Ответить | Цитировать Сообщить модератору
 Re: Отобрать с учетом времени  [new]
anrrry
Member

Откуда:
Сообщений: 36
Спасибо за предложение, но на 2005 не работает :(
Type time is not a defined system type.
24 апр 14, 20:14    [15931950]     Ответить | Цитировать Сообщить модератору
 Re: Отобрать с учетом времени  [new]
o-o
Guest
2005:
declare @SALES table (sales_id int, sls_money datetime);
insert into @SALES values
(1, '20140205 14:31:00'),
(2, '20140205 17:31:00'),
(3, '20140209 10:56:00'),
(4, '20140209 11:00:00'),
(5, '20140220 11:00:00')

SELECT *
FROM  @SALES as s 
WHERE s.SLS_MONEY >= '20140201' AND s.SLS_MONEY < '20140221'
      and cast(convert(char(12), sls_money, 114) as datetime) between '11:00' and '17:30'
--------------------------
sales_id	sls_money
1	2014-02-05 14:31:00.000
4	2014-02-09 11:00:00.000
5	2014-02-20 11:00:00.000
24 апр 14, 20:29    [15932007]     Ответить | Цитировать Сообщить модератору
 Re: Отобрать с учетом времени  [new]
anrrry
Member

Откуда:
Сообщений: 36
o-o,

Большое, спасибо!
24 апр 14, 20:36    [15932032]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить