逻辑计算一年中不是假日的日期?

时间:2011-11-26 09:24:53

标签: java sql database oracle

我的要求: - 对于一个数据库表,其中包含一年中所有日期的标记“IsHoliday”,如果是假日,则为“是”,如果不是,则为“否”。

我想给那个不是假期的日子索引,从1开始到一年的第一个工作日,依此类推。在批次的帮助下。

当前情况: - 我的数据库(Oracle)中有手动条目维护的假日表。每当我们必须检查一天工作或假日的特定日期时,我们会在输入的每个日期点击数据库,并与假期表进行比较,这是一种昂贵的方式。

我要求的似乎是一种优化的方式,因此我想维护一个DB表,其中WorkDays作为条目与一年中的日期一起,因为在某些业务场景中我必须给出当天的数字作为返回(如果是jan(星期四)是第4个工作日然后我想返回4,8th jan as 6)

CAL_DT IS_HOLIDAY WKNG_DAY_INDX

1月1日 - 11月是

2-Jan-11 No 1

3月1日至11月2日

4月1日 - 11月是

5月1日至11月3日

6-Jan-11 No 4

通过批处理来填充索引,检查is_holiday = no字段是我的要求。

我希望我现在很清楚??

我很感激这些建议。

2 个答案:

答案 0 :(得分:0)

您可以使用ROW_NUMBER()分析函数生成序列号。

SELECT ROW_NUMBER() OVER (ORDER BY CalendarDate) AS RowNum_
     , CalendarDate
FROM MyDB.Calendar
Where IsHoliday = 'No';

答案 1 :(得分:0)

你在这里遇到两个大问题:

1 - 并非所有文化都有相同的假期,因此您对印度的参赛作品与美国不同,大多数其他国家都不会。

2 - 很多假期四处走动,所以a(day,year,isHoliday)元组无法处理11月的第4个星期四作为假期,因为它不是同一天。更不用说闰年会在二月之后搞乱假期。

你应该做的是在假日表中有几列 - 一组用于移动假期的列和一组列,其中假日总是在一个月的同一天。当填充另一列的列时,其中一列将为null。祝你好运,将这些转化为年份。