sql-server-DATE查找表(1990/01/01:2041/12/31)

我使用DATE的主表查找日期和其他值,以便控制我的应用程序中的多个事件,间隔和计算.从1990年1月1日到12/31/2041,每天都有行.

我如何使用此查找表的一个示例是:

>一个客户在2010年1月31日将一个商品作为典当
>客户于2010年5月3日退货,以免除该物品的利息.
>如果他支付1个月的利息,则员工输入“ 1”,然后该应用会查找当机
日期主表中的日期(JAN-31-2010),并将FEB-28-2010放入适用的利息
pymt日期.因为FEB-31不存在,所以返回了FEB-28!如果说2010年是a年,
会返回FEB-29.
>如果客户付款2个月,则退回MAR-31-2010. 3个月,APR-30 …如果客户
付款超过3个月或日期查询表未涵盖的其他期间,
员工手动输入适用日期.

日期查找表如下所示:

{ Copyright 1990:2010, Frank Computer, Inc. }

{ DBDATE=YMD4- (correctly sorted for faster lookup) }

CREATE TABLE     datemast 
(
 dm_lookup       DATE,    {lookup col used for obtaining values below}
 dm_workday      CHAR(2), {NULL=Normal Working Date,}
                          {NW=National Holiday(Working Date),}
                          {NN=National Holiday(Non-Working Date),}
                          {NH=National Holiday(Half-Day Working Date),}
                          {CN=Company Proclamated(Non-Working Date),}
                          {CH=Company Proclamated(Half-Day Working Date)}

 {several other columns omitted}

 dm_description CHAR(30), {NULL, holiday description or any comments}
 dm_day_num     SMALLINT, {number of elapsed days since begining of year}
 dm_days_left   SMALLINT, (number of remaining days until end of year}

 dm_plus1_mth   DATE,     {plus 1 month from lookup date}
 dm_plus2_mth   DATE,     {plus 2 months from lookup date}
 dm_plus3_mth   DATE,     {plus 3 months from lookup date}
 dm_fy_begins   DATE,     {fiscal year begins on for lookup date}
 dm_fy_ends     DATE,     {fiscal year ends on for lookup date}
 dm_qtr_begins  DATE,     {quarter begins on for lookup date}
 dm_qtr_ends    DATE,     {quarter ends on for lookup date}
 dm_mth_begins  DATE,     {month begins on for lookup date}
 dm_mth_ends    DATE,     {month ends on for lookup date}
 dm_wk_begins   DATE,     {week begins on for lookup date}
 dm_wk_ends     DATE,     {week ends on for lookup date}

 {several other columns omitted}
)
IN "S:\PAWNSHOP.DBS\DATEMAST"; 

有更好的方法吗?还是很酷的方法?

最佳答案
这是一种合理的处理方式.如果查看data warehousing,您会发现这些系统通常将类似的系统用于时间事实表.由于您使用的五十年内行数少于2万,因此没有大量数据.

有一个假设,即存储比执行计算具有更好的性能.由于计算并不那么困难(尽管它们也不是琐事),并且任何磁盘访问在计算方面都非常慢,因此,大多数情况下肯定不是很明确.但是,将信息存储在一个表中的便利性足以确保必须跟踪存储在表中的每个计算值的适当方法.

转载注明原文:sql-server-DATE查找表(1990/01/01:2041/12/31) - 代码日志