首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节假日存储,如何存储呢?

节假日存储,如何存储呢?
EN

Stack Overflow用户
提问于 2011-11-13 21:30:49
回答 3查看 1.1K关注 0票数 0

我需要有节假日列表来存储在数据库中,并计算基于holidays.holidays列表的工作日将是不同的国家和不同的年份都不一样。因此,我需要根据holidays.start日期计算开始日期和结束日期之间的工作日,而结束日期可能不在同一年。所以,在这种情况下,请帮助我解决数据库设计应该如何维护的问题。

EN

回答 3

Stack Overflow用户

发布于 2011-11-13 21:37:38

制作一张表格,列出每个国家的假日:

代码语言:javascript
复制
CREATE TABLE Holidays
(
  Country INT NOT NULL,
  [Date] DATE NOT NULL,
  CONSTRAINT PK_Holidays PRIMARY KEY CLUSTERED (Country, [Date])
)

然后创建一个CTE来枚举两个日期之间的所有日期:

代码语言:javascript
复制
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(我认为它们映射到星期六和星期日)。

票数 1
EN

Stack Overflow用户

发布于 2011-11-13 21:34:40

假期必须与地点和年份相关。

如果有管理假日的规则,也许这些规则更好地用代码来表达。这些可以是触发器或存储过程,您将使用它们来填充每年的业务日历。

票数 0
EN

Stack Overflow用户

发布于 2011-11-13 21:35:30

代码语言:javascript
复制
create table holidays{
  country_id int,
  name text,
  start_date date,
  end_date date
}default charset=utf8;

计算工作日并不简单,因为您需要定义什么是工作日。对于较大的周期,您可以大致找到天数的差异并乘以5/7。对于较小的周期,您可能需要更高的精度,因此可能应该使用编程逻辑来实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8111874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档