代码之家  ›  专栏  ›  技术社区  ›  Joe R.

日期查询表(1990/01/01:2041/12/31)

  •  1
  • Joe R.  · 技术社区  · 15 年前

    1. 客户在2010年1月31日典当物品

    2. 日期主表中的日期(2010年1月31日),并将2010年2月28日放入适用利息中 pymt日期。2月28日被退回,因为2月31日不存在!如果2010年是闰年的话,那就是 会在2月29日回来。
    3. 如果客户支付2个月,则返回2010年3月31日。3个月,4月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"; 
    

    4 回复  |  直到 15 年前
        1
  •  2
  •   Jonathan Leffler    15 年前

    这是一种合理的做事方式。如果你调查 data warehousing ,您会发现这些系统通常对时间事实表使用类似的系统。由于在您使用的50年时间跨度中只有不到2万行,因此数据量并不庞大。

    有一种假设,存储比计算提供更好的性能;这当然不是很清楚,因为计算不是那么难(尽管它们也不是琐碎的),而且任何磁盘访问在计算方面都非常慢。然而,在一个表中具有信息的便利性可能足以保证必须对存储在表中的每个计算值跟踪适当的方法。

        2
  •  1
  •   Scott Bailey    15 年前

    例如,Oracle有一个last_day()函数来获取一个月的最后一天,还有一个add_months()函数来添加月份。通常在Oracle中,我将使用一个流水线函数,它接受开始和结束日期,并返回一个嵌套的日期表。

        3
  •  1
  •   Community CDub    8 年前

    在Oracle中生成日期行集的最酷的方法是使用分层查询功能, connect by . 我已经贴了一个这种用法的例子 in another thread .

    它提供了很大的灵活性,而不需要流水线函数的PL/SQL开销。

        4
  •  0
  •   Joe R.    14 年前

    好的,我用31天/月的时间测试了我的应用程序来计算利率;当铺很高兴!当地法律祈祷如下:从典当或最后一个内景。日期到5天,5%本金利息,6到10天=10%,11到15天=15%,16天到1个月=20%。

    NUMBER OF ELAPSED DAYS SINCE
    PAWN DATE OR LAST INTEREST PYMT
    
     FROM     TO  ACUMULATED
      DAY    DAY    INTEREST
    -----   ----  ----------
        0      5       5.00%
        6     10      10.00%
       11     15      15.00%
       16     31      20.00%
       32     36      25.00%
       37     41      30.00%
       42     46      35.00%
       47     62      40.00%
    
       [... until day 90 (forfeiture allowed)]
       from day 91 to 999, daily prorate based on 20%/month.