powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Рабочие дни
16 сообщений из 16, страница 1 из 1
Рабочие дни
    #33249692
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только на Поиск не отправляйте. Мне нужно без всяких выкрутасов определить количество рабочих дней между двумя датами, вернее имея количество календарных дней определить из них кол-во рабочих. Праздники не учитываются (нет их!)
...
Рейтинг: 0 / 0
Рабочие дни
    #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
Рабочие дни
    #33249712
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Табличка для наглядности:
дней\первыйпн 2вт 3ср 4чт 5пт 6сб 7вс 1 0 0000000 1 0000011 2 0000121 3 0001221 4 0012221 5 0122221 6 1222221
...
Рейтинг: 0 / 0
Рабочие дни
    #33249714
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, спасибо. Буду пробовать оформит все это одной строкой
...
Рейтинг: 0 / 0
Рабочие дни
    #33249893
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то "...лыжи совсем не едут", а если первый день недели понедельник?
...
Рейтинг: 0 / 0
Рабочие дни
    #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
Рабочие дни
    #33250058
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасиб большой
...
Рейтинг: 0 / 0
Рабочие дни
    #33250075
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в старом варианте воскресенье обрабатывалось неправильно. Сейчас вроде все в порядке.
...
Рейтинг: 0 / 0
Рабочие дни
    #33250078
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что нужно поправить в старом варианте, что бы воскресенье обрабатывалось правильно?
...
Рейтинг: 0 / 0
Рабочие дни
    #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
Рабочие дни
    #33250086
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой-большой спасиб!!! Все срослось!
Может-быть стОит поместить это в ФАК? Полезная вещь, ИМХО.
Еще раз спасибо.
...
Рейтинг: 0 / 0
Рабочие дни
    #33250092
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xax_nvМожет-быть стОит поместить это в ФАК?
Не думаю. Этот Question не настолько Frequently Asked... Зато я сейчас перенесу это из Аксесса в какой-нибудь более подходящий форум.
...
Рейтинг: 0 / 0
Рабочие дни
    #33261345
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще один вариант:
http://sql.ru/forum/actualthread.aspx?tid=215367
...
Рейтинг: 0 / 0
Рабочие дни
    #33267199
Фотография Castor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда то реализовывал нечто подобное на FireBird'е. Там надо было также получить дату, которая отличалась от заданой на 30 рабочих дней. Т.Е. считались как рабочие дни, так и те дни которые объявлены нерабочими(ПН-ПТ) и выходные (СБ и ВС), которые объявлялись рабочими(в случае переносов). Делал все через введение пары соответствующих табличек, которые заполнялись после утверждения рабочих дней на следующий год (эта информация бралась из "Консультанта")
...
Рейтинг: 0 / 0
Рабочие дни
    #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
Рабочие дни
    #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]