powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / интервал даты
7 сообщений из 7, страница 1 из 1
интервал даты
    #34190098
rep_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день!

Как в sybase определить интервал 30 рабочих дней, исключая субботу, воскресенье и праздники (например 8 марта....)?

Спасибо.
...
Рейтинг: 0 / 0
интервал даты
    #34190171
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rep_user wrote:

> Как в sybase определить интервал 30 рабочих дней, исключая субботу,
> воскресенье и праздники (например 8 марта....)?

Завести табличку, в которой будут перечислены все дни с признаками
"рабочий/выходной". Далее можно циклом...
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
интервал даты
    #34190195
rep_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно как то в процедуре?
и как мне можно из системного календаря заполнить свою табличку, хотя бы субботы и воскресенья.
...
Рейтинг: 0 / 0
интервал даты
    #34190315
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не можно, а нужно в процедуре(или функции). Ибо встроенных средств для вашего случая нет.
Есть такая функция DOW, возвращает день недели.
С помощью нее можно отфильтровать субботы и воскресенья.
...
Рейтинг: 0 / 0
интервал даты
    #34190430
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALTER FUNCTION "DBA"."F_AddNBankDays"( IN dbegin date, in ndays integer )
RETURNS date
DETERMINISTIC
BEGIN
DECLARE cdateret date;
DECLARE i integer;
DECLARE n integer;
DECLARE cn integer;

SET cdateret = dbegin;
SET n = 0;

lbl:
LOOP
SET cdateret = dateadd(day,1,cdateret);
IF DATEPART(weekday,cdateret) not in (1,7) THEN
// если рабочий день, то проверяем или наша любимая страна мож сделала его віходнім
SET cn = 0;
SELECT count(*)
INTO cn
FROM "dba"."holiday_days"
WHERE ( "dba"."holiday_days"."cdate" = cdateret ) AND
( "dba"."holiday_days"."ctype" = 1 );
IF cn = 0 THEN //рабочий
SET n = n + 1;
END IF;
ELSE //суббота или воскресенье, но в нашей стране могет и рабочий быть
SET cn = 0;
SELECT count(*)
INTO cn
FROM "dba"."holiday_days"
WHERE ( "dba"."holiday_days"."cdate" = cdateret ) AND
( "dba"."holiday_days"."ctype" = 2 );
IF cn > 0 THEN //рабочий
SET n = n + 1;
END IF;
END IF;

IF n = ndays THEN
LEAVE lbl;
END IF;

END LOOP lbl;


/* Type the function statements here */
RETURN cdateret;
END
...
Рейтинг: 0 / 0
интервал даты
    #34190539
rep_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне надо под ASE
...
Рейтинг: 0 / 0
интервал даты
    #34190658
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rep_userМне надо под ASE
Ну наверно надо сделать под ASE.
В чем проблема?
Вроде принцип показали и даже пример нормальный привели.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / интервал даты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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