числа и время
Jun. 27th, 2010 04:43 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
люди поможите... торможу
под катом текст 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.
однако когда я вот так пишу, получаю данные и ночные тоже. че делать?
под катом текст 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.
однако когда я вот так пишу, получаю данные и ночные тоже. че делать?
no subject
Date: 2010-06-27 02:21 pm (UTC)no subject
Date: 2010-06-27 02:24 pm (UTC)приведи пример неправильной записи, которая у тебя получается, хотя не должна: мне нужно ее старттайм и ендтайм
no subject
Date: 2010-06-27 02:25 pm (UTC)Не было еще такого сиквела, чтоб его не задрессировали :) Не боись.
какртинка. справа колонка двух дат:
Date: 2010-06-27 06:35 pm (UTC)Re: какртинка. справа колонка двух дат:
Date: 2010-06-27 07:18 pm (UTC)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: какртинка. справа колонка двух дат:
Date: 2010-06-27 08:19 pm (UTC)во вторых затея очень хорошая, но дело в том, что мне нужна неделя.
причем неделя утро, неделя вечер. очень не хочется на 30 дней писать кейсы...
Re: какртинка. справа колонка двух дат:
Date: 2010-06-27 08:25 pm (UTC)Точнее можете рассказать? Какая именно неделя утро? Например, с какой даты начиная? Потом: период должен ПОЛНОСТЬЮ укладываться в дневные (или утренние) часы, или только начинаться там? судя по тому, что есть дата енд - полностью, да?
Я готова нарисовать это в общем виде :))
Re: какртинка. справа колонка двух дат:
Date: 2010-06-27 08:45 pm (UTC)люди работают в две смены по 12 часов. утро с 7 до 19, вечер с 19 до 7. и каждую неделю смены меняются. те кто работал утром переходят на вечер и наоборот.
Amount собирает продукцию.
мне говорят, скажи дорогая лебеда, сколько Contents 110 ппроизвела одна смена за месяц и сколько вторая.
и не забудь лебеда, что первая смена если так считать это та которая первого числа работала утром до субботы, с воскресенья вышла во вторую смену до субботы, в воскресенье следующей недели вышла опять с утра.. и так до конца месяца.
допустим по неделям, чтобы не открывать америку, я бы сама записала.. ибо там с днями недели заморачиваться.. но внутри недели хотелось бы все сразу..
Re: какртинка. справа колонка двух дат:
From:Re: какртинка. справа колонка двух дат:
From:Re: какртинка. справа колонка двух дат:
From:Re: какртинка. справа колонка двух дат:
From:Re: какртинка. справа колонка двух дат:
From:Re: какртинка. справа колонка двух дат:
From:Re: какртинка. справа колонка двух дат:
Date: 2010-06-27 07:21 pm (UTC)no subject
Date: 2010-06-28 06:43 am (UTC)(
@group tinyint, @start datetime, @end datetime
)
-- group 0 - first week morning
--group 1 - first week EVENING
RETURNS bit
AS
BEGIN
declare
@ret bit,
@night_group bit,
@week_from tinyint,
@first_day datetime,
@morning_b datetime ,
@evening_b datetime ,
@start_date datetime,
@start_time datetime,
@end_date datetime,
@end_time datetime
if datediff(hh,@start,@end) > 12
begin
set @ret = 0
return @ret
end
set @morning_b = '1900-01-01 07:00:00'
set @evening_b = '1900-01-01 19:00:00'
set @first_day = '2010-06-01'
set @start_date = convert(datetime, convert (varchar(30), @start, 101))
set @end_date = convert(datetime, convert (varchar(30), @end, 101))
set @start_time = convert(datetime, convert (varchar(30), @start, 108))
set @end_time = convert(datetime, convert (varchar(30), @end, 108))
if @start_time < @morning_b or @start_time > @evening_b
set @start_date = dateadd(d,-1,@start_date)
if @end_time < @morning_b or @end_time > @evening_b
set @end_time = dateadd(d,-1,@end_date)
set @week_from = datediff(wk,@first_day,@start_date) +1
select @night_group = case when (@week_from %2) = @group then 1 else 0 end
if @night_group = 0
begin
if @start_time < @morning_b or @start_time > @evening_b
begin
set @ret = 0
return @ret
end
if @end_time < @morning_b or @end_time > @evening_b
begin
set @ret = 0
return @ret
end
end
else
begin
if @start_time between @morning_b and @evening_b
begin
set @ret = 0
return @ret
end
if @end_time between @morning_b and @evening_b
begin
set @ret = 0
return @ret
end
end
set @ret = 1
return @ret
END
----------------------------------------------------
вызов:
SELECT
([Amount])
,[Contents],StartTime,EndTime
FROM [MinAs].[dbo].[ACCUM]
where Contents='110' and dbo.fn_12hours_match(>group 0 or 1<, StartTime,EndTime) = 1
-----------------------------
проверяй :)
no subject
Date: 2010-06-28 06:47 am (UTC)no subject
Date: 2010-06-28 06:54 am (UTC)CREATE FUNCTION permission denied in database 'master'.
no subject
Date: 2010-06-28 07:04 am (UTC)Это значит, что у тебя нет аршаот создавать функции. ДиБиЭя попроси ее сделать. Или попроси аршаот. :((( Тут я бессилен. Зато удобная :) На все твои случаи жизни.
no subject
Date: 2010-06-28 07:05 am (UTC)no subject
Date: 2010-06-28 07:21 am (UTC)я попрошу.. или переделаю твою функцию в простой селект.. там по идее не должно быть сложно, а?
no subject
Date: 2010-06-28 07:26 am (UTC)Я потому и спрашивала про функцию, можно ли. Попроси, пусть создадут.
Не создавай в мастере! Меня это смущает. Обычно функции создаются в собственной базе. Ты проверь, может быть, там тебе можно...
no subject
Date: 2010-06-28 07:28 am (UTC)no subject
Date: 2010-06-28 07:41 am (UTC)если сравнивать с С,
ты возращаешь на каждую строчку 1 или 0, да? и если 1 то строчка берется в расчет..
в любом случае я вычленю твой текст и синтаксис и стану умнее благодаря тебе :)
no subject
Date: 2010-06-28 07:47 am (UTC)ну, в этом и смысЕл функций :)
Гораздо гибче отбор, потому что позволяет нормальное программирование внутри функции, преобразование типов в любом количестве, коррекция данных и тэ пэ :)
Я старалась не слишком "сжимать" код, чтобы в логике можно было разобраться.
Жалко, если не пригодится... Ну что поделать :))
если нельзя там писать, можно как то иначе
Date: 2010-06-28 07:43 am (UTC)хоть на них смогу чего нибудь интересное делать:)
no subject
Date: 2010-06-28 07:28 am (UTC)SELECT
([Amount])
,[Contents],StartTime,EndTime
FROM [MinAshplast].[dbo].[ACCUM]
where (CONVERT(char(8),StartTime,112) >= '20100620'
and CONVERT(char(8),EndTime,112)<= '20100626')
and (substring(CONVERT (char(8), StartTime, 108),1,5)>= '07:00'
and substring(CONVERT (char(8), endTime, 108),1,5)<= '19:00')
and Contents like 'm%'
and DAY(StartTime)=DAY(EndTime)
тобишь не хватало последнего тная and DAY(StartTime)=DAY(EndTime)
я щас попробую твою идею set @morning_b = '1900-01-01 07:00:00'
заграбастать и скомпилировать просто текст :)
и все замечательно
а вот на вечер не срабатывает :(
no subject
Date: 2010-06-28 07:35 am (UTC)неудобно :(
именно из-за второй смены
я там накрутила на эту тему.... специально, чтобы эти суточные переходы не мешали
no subject
Date: 2010-06-28 07:46 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Вот от этого дня он считает:
From:Re: Вот от этого дня он считает:
From:Re: Вот от этого дня он считает:
From:Почему так нельзя?
From:Re: Вот от этого дня он считает:
From:error
From:Re: error
From:Re: error
From:окей, получается но не совсем
From:Re: окей, получается но не совсем
From:Re: окей, получается но не совсем
From:no subject
Date: 2010-06-28 06:47 am (UTC)