Хранение праздников, как его можно хранить? - PullRequest
0 голосов
/ 13 ноября 2011

Мне нужен список праздников для хранения в ДБ и расчета рабочих дней на основе праздников. Список праздников будет разным для разных стран и не одинаковым для всех лет. поэтому мне необходимо рассчитать рабочие дни между начальной и конечной датами в соответствии с праздничными днями. Дата начала и окончания могут быть не в одном и том же году. так что помогите мне в этом случае, как поддерживать дизайн БД.

Ответы [ 3 ]

1 голос
/ 13 ноября 2011

Составьте таблицу с выходными для каждой страны:

CREATE TABLE Holidays
(
  Country INT NOT NULL,
  [Date] DATE NOT NULL,
  CONSTRAINT PK_Holidays PRIMARY KEY CLUSTERED (Country, [Date])
)

Затем создайте CTE , чтобы перечислить все дни между двумя датами:

WITH Dates ([Date] Date)
AS
(
  SELECT @StartDate
  UNION ALL
  SELECT DATEADD(DAY, @StartDate, 1)
  FROM Dates Where Dates.Date < @EndDate
)
SELECT COUNT(1) FROM Dates
WHERE [Date] NOT IN (SELECT [Date] from Holidays WHERE Country = @CountryCode)
AND DATEPART(WeekDay, [Date]) NOT IN (6,7)
WITH (MAXRECURSION = 10000)

Это будетдать вам количество рабочих дней.Запрос CTE создает список всех дат между @StartDate и @EndDate, а затем отфильтровывает те даты, которые указаны как праздники для конкретной страны и не являются рабочим днем ​​№ 6 или 7 (который, я думаю, сопоставляется с субботой и воскресеньем).

0 голосов
/ 13 ноября 2011
create table holidays{
  country_id int,
  name text,
  start_date date,
  end_date date
}default charset=utf8;

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

0 голосов
/ 13 ноября 2011

Праздники должны зависеть от региона и года.

Если существуют правила, определяющие время наступления праздников, возможно, они лучше выражены в коде. Это могут быть триггеры или хранимые процедуры, которые вы будете использовать для заполнения своих бизнес-календарей каждый год.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...