Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Рабочие дни / 16 сообщений из 16, страница 1 из 1
03.09.2005, 11:29
    #33249692
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
Только на Поиск не отправляйте. Мне нужно без всяких выкрутасов определить количество рабочих дней между двумя датами, вернее имея количество календарных дней определить из них кол-во рабочих. Праздники не учитываются (нет их!)
...
Рейтинг: 0 / 0
03.09.2005, 12:06
    #33249711
Владимир Саныч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
xax_nvвернее имея количество календарных дней определить из них кол-во рабочих.
Вот это точно некорректная постановка. Надо знать именно даты, а не количество. Точнее - количество плюс день недели первого. И тогда количество выходных состоит из двух слагаемых:

Первое слагаемое - это выходные в целых неделях: (X \ 7) * 2, где X - количество календарных дней.

Второе слагаемое зависит от:
* количества дней в остатке, не уложившемся в целые недели: a = X mod 7
* для недели первого дня: b = weekday(первыйдень) - это число от 1 до 7, где 1 воскресенье, а 7 суббота
Если a=0 или a+b<8, то второе слагаемое 0.
Если b=1 или a+b=8, то второе слагаемое 1.
Иначе второе слагаемое 2.

Итого надо отнять от X оба слагаемых.
...
Рейтинг: 0 / 0
03.09.2005, 12:11
    #33249712
Владимир Саныч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
Табличка для наглядности:
дней\первыйпн 2вт 3ср 4чт 5пт 6сб 7вс 1 0 0000000 1 0000011 2 0000121 3 0001221 4 0012221 5 0122221 6 1222221
...
Рейтинг: 0 / 0
03.09.2005, 12:18
    #33249714
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
Саныч, спасибо. Буду пробовать оформит все это одной строкой
...
Рейтинг: 0 / 0
03.09.2005, 17:39
    #33249893
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
Что-то "...лыжи совсем не едут", а если первый день недели понедельник?
...
Рейтинг: 0 / 0
03.09.2005, 21:30
    #33250030
Владимир Саныч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
Тогда:

дней\первыйпн 1вт 2ср 3чт 4пт 5сб 6вс 7 0 0000000 1 0000011 2 0000121 3 0001221 4 0012221 5 0122221 6 1222221
Второе слагаемое зависит от:
* количества дней в остатке, не уложившемся в целые недели: a = X mod 7
* для недели первого дня: b = weekday(первыйдень) - это число от 1 до 7, где 1 понедельник, а 7 воскресенье
Если a=0 или a+b< 7 , то второе слагаемое 0.
Если b= 7 или a+b= 7 , то второе слагаемое 1.
Иначе второе слагаемое 2.
...
Рейтинг: 0 / 0
03.09.2005, 22:26
    #33250058
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
Спасиб большой
...
Рейтинг: 0 / 0
03.09.2005, 22:57
    #33250075
Владимир Саныч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
Кстати, в старом варианте воскресенье обрабатывалось неправильно. Сейчас вроде все в порядке.
...
Рейтинг: 0 / 0
03.09.2005, 23:06
    #33250078
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
А что нужно поправить в старом варианте, что бы воскресенье обрабатывалось правильно?
...
Рейтинг: 0 / 0
03.09.2005, 23:11
    #33250079
Владимир Саныч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
xax_nvА что нужно поправить в старом варианте, что бы воскресенье обрабатывалось правильно?
Вместо
Если a=0 или a+b<8, то второе слагаемое 0.
Если b=1 или a+b=8, то второе слагаемое 1.
написать так:
Если a=0, то второе слагаемое 0.
Если b=1 или a+b=8, то второе слагаемое 1.
Если a+b<8, то второе слагаемое 0.
...
Рейтинг: 0 / 0
03.09.2005, 23:26
    #33250086
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
Большой-большой спасиб!!! Все срослось!
Может-быть стОит поместить это в ФАК? Полезная вещь, ИМХО.
Еще раз спасибо.
...
Рейтинг: 0 / 0
03.09.2005, 23:45
    #33250092
Владимир Саныч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
xax_nvМожет-быть стОит поместить это в ФАК?
Не думаю. Этот Question не настолько Frequently Asked... Зато я сейчас перенесу это из Аксесса в какой-нибудь более подходящий форум.
...
Рейтинг: 0 / 0
09.09.2005, 14:10
    #33261345
Владимир Саныч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
Еще один вариант:
http://sql.ru/forum/actualthread.aspx?tid=215367
...
Рейтинг: 0 / 0
13.09.2005, 18:00
    #33267199
Castor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
когда то реализовывал нечто подобное на FireBird'е. Там надо было также получить дату, которая отличалась от заданой на 30 рабочих дней. Т.Е. считались как рабочие дни, так и те дни которые объявлены нерабочими(ПН-ПТ) и выходные (СБ и ВС), которые объявлялись рабочими(в случае переносов). Делал все через введение пары соответствующих табличек, которые заполнялись после утверждения рабочих дней на следующий год (эта информация бралась из "Консультанта")
...
Рейтинг: 0 / 0
28.11.2005, 14:29
    #33403471
LeVSy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
у меня не работает такой вариант...

wrkday-
((wrkday)/7*2 + CASE
WHEN ((wrkday)%7)=0 THEN 0
WHEN (datepart(dw,da)=1) or ((wrkday)%7)+datepart(dw,da)=8 THEN 1
WHEN ((wrkday)%7)+datepart(dw,da)<8 THEN 0
else 2
END
...
Рейтинг: 0 / 0
21.05.2006, 20:31
    #33741249
Иван81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рабочие дни
Вроде бы написал все как надо но не работает
select col-(col/7)*2-
case when a=0 or a+b<8 then 0
when b=1 or a+b=8 then 1
when a+b>8 then 2
else 0 end
помогите если не трудно
с уважением Иван
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Рабочие дни / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]