lebeda: (Default)
lebeda ([personal profile] lebeda) wrote2010-06-27 04:43 pm

числа и время

люди поможите... торможу
под катом текст sql


SELECT
([Amount])

,[Contents],StartTime,EndTime

FROM [MinAs].[dbo].[ACCUM]
where (CONVERT(char(8),StartTime,112) >= '20100622'
and CONVERT(char(8),EndTime,112)<= '20100623')
and (substring(CONVERT (char(8), StartTime, 108),1,5)>= '07:00'
and substring(CONVERT (char(8), endTime, 108),1,5)<= '19:00')
and Contents='110'


есть StartTime число+время начала и EndTime число+время окончания.
надо узнать количество записанное в Amount
с 22/6/10 до 23/6/10
и только в утренние часы 7:00 до 19:00.

однако когда я вот так пишу, получаю данные и ночные тоже. че делать?

[identity profile] lebeda.livejournal.com 2010-06-27 02:21 pm (UTC)(link)
можно на ты? незнаю я в чем дело, вопрос или логика правильная?

[identity profile] ptfenix.livejournal.com 2010-06-27 02:24 pm (UTC)(link)
Да странно. Я проверила как раз сравнение строк, которые у тебя получаются. Вроде нормально... И логика...
приведи пример неправильной записи, которая у тебя получается, хотя не должна: мне нужно ее старттайм и ендтайм

[identity profile] ptfenix.livejournal.com 2010-06-27 02:25 pm (UTC)(link)
И ваще :)
Не было еще такого сиквела, чтоб его не задрессировали :) Не боись.

какртинка. справа колонка двух дат:

[identity profile] lebeda.livejournal.com 2010-06-27 06:35 pm (UTC)(link)
Photobucket

Re: какртинка. справа колонка двух дат:

[identity profile] ptfenix.livejournal.com 2010-06-27 07:18 pm (UTC)(link)
Все правильно, ошибка в логике :)
01.01 МЕНЬШЕ 19:00, то есть, позднее время окончания выглядит как раннее. А 21.10 - БОЛЬШЕ 7 утра.

Попробуйте вот так:

declare @start datetime
declare @end datetime

set @start = '2010-06-22 21:10:00'
set @end = '2010-06-23 01:01:00'


select
CONVERT(char(8),@start,112),
CONVERT(char(8),@end,112),
substring(CONVERT (char(8), @start, 108),1,5),
substring(CONVERT (char(8), @end, 108),1,5),
case when
((@start between '2010-06-22 07:00:00' and '2010-06-22 19:00:00')
and
(@end between '2010-06-22 07:00:00' and '2010-06-22 19:00:00'))
or
((@start between '2010-06-23 07:00:00' and '2010-06-22 19:00:00')
and
(@end between '2010-06-23 07:00:00' and '2010-06-22 19:00:00'))
then 1 else 0 end


не подойдет?

Re: какртинка. справа колонка двух дат:

[identity profile] lebeda.livejournal.com 2010-06-27 08:19 pm (UTC)(link)
во первых спасибо за помощь!
во вторых затея очень хорошая, но дело в том, что мне нужна неделя.
причем неделя утро, неделя вечер. очень не хочется на 30 дней писать кейсы...

Re: какртинка. справа колонка двух дат:

[identity profile] ptfenix.livejournal.com 2010-06-27 08:25 pm (UTC)(link)
Вот я поэтому и спросила насчет более общих дат. :)
Точнее можете рассказать? Какая именно неделя утро? Например, с какой даты начиная? Потом: период должен ПОЛНОСТЬЮ укладываться в дневные (или утренние) часы, или только начинаться там? судя по тому, что есть дата енд - полностью, да?

Я готова нарисовать это в общем виде :))

Re: какртинка. справа колонка двух дат:

[identity profile] lebeda.livejournal.com 2010-06-27 08:45 pm (UTC)(link)
ох, если честно, дело такое..

люди работают в две смены по 12 часов. утро с 7 до 19, вечер с 19 до 7. и каждую неделю смены меняются. те кто работал утром переходят на вечер и наоборот.
Amount собирает продукцию.
мне говорят, скажи дорогая лебеда, сколько Contents 110 ппроизвела одна смена за месяц и сколько вторая.
и не забудь лебеда, что первая смена если так считать это та которая первого числа работала утром до субботы, с воскресенья вышла во вторую смену до субботы, в воскресенье следующей недели вышла опять с утра.. и так до конца месяца.
допустим по неделям, чтобы не открывать америку, я бы сама записала.. ибо там с днями недели заморачиваться.. но внутри недели хотелось бы все сразу..

Re: какртинка. справа колонка двух дат:

[identity profile] ptfenix.livejournal.com 2010-06-27 08:53 pm (UTC)(link)
В SQL servere (это ведь он?) есть очень удобная обработка дней недели. Можно написать общую функцию для всех случаев сразу. :))) Впрочем, не буду усложнять... не мое дело.

То есть, нужен запрос не на два дня, а на все дни недели, некий интервал? С такого-то дня по такой-то, с такого-то часа по такой-то?

Re: какртинка. справа колонка двух дат:

[identity profile] lebeda.livejournal.com 2010-06-27 09:01 pm (UTC)(link)
угумс.
я поищу про обработку дней, спасибо Птица, ты хорошая:)

Re: какртинка. справа колонка двух дат:

[identity profile] ptfenix.livejournal.com 2010-06-27 09:25 pm (UTC)(link)
Я так понял, типа: не лезь? :)))

Я понимаю, сама самостоятельная...

Re: какртинка. справа колонка двух дат:

[identity profile] lebeda.livejournal.com 2010-06-27 09:30 pm (UTC)(link)
мамочка, солнце мое! я совсем наоборот, мне помощь в радость, тем более от такой умной и любимой мной женщины.
мне показалось, что ты занята, и мне было дико неудобно просить...

Re: какртинка. справа колонка двух дат:

[identity profile] ptfenix.livejournal.com 2010-06-27 09:31 pm (UTC)(link)
:)))
Я завтра поколдую, сегодня уже башка не варит. А функцию можно написать, или только простой селект? Тут очень с функцией удобно работать: послал параметры, и никаких нагромождений...

Re: какртинка. справа колонка двух дат:

[identity profile] lebeda.livejournal.com 2010-06-27 09:36 pm (UTC)(link)
сонца моя, ты пиши птичка, сколько напишешь будет очень хорошо :)

спасибо дорогая!

Re: какртинка. справа колонка двух дат:

[identity profile] ptfenix.livejournal.com 2010-06-27 07:21 pm (UTC)(link)
Если нужно более общее обращение с датами, можно поиграть с обработкой по типу "часть даты". Свистните, я с удовольствием.