日期算术

可以将日期减去,递增或递减。

减去日期

从另一个日期 (DATE1) 中减去一个日期 (DATE2) 的结果是指定两个日期之间的年数,月数和天数的日期持续时间。 结果的数据类型为 DECIMAL (8, 0)。 如果 DATE1 大于或等于 DATE2,那么将从 DATE1中减去 DATE2 。 但是,如果 DATE1 小于 DATE2,那么将从 DATE2中减去 DATE1 ,并使结果的符号为负数。 以下过程描述阐明了操作 RESULT = DATE1 - DATE2中涉及的步骤。

如果 DAY( DATE2 ) <= DAY( DATE1 )
,那么 DAY(RESULT) = DAY( DATE1 ) - DAY( DATE2 )。

如果 DAY (DATE2)> DAY (DATE1)
,那么 DAY (RESULT) = N + DAY (DATE1)-DAY (DATE2)
,其中 N = MONTH 的最后一天 (DATE2)。
   然后, MONTH (DATE2) 将按 1 递增。

如果 MONTH( ) <= MONTH( ) ,那么 MONTH(RESULT) = MONTH( ) - MONTH( )。 DATE2DATE1
DATE1DATE2

如果 MONTH (DATE2)> MONTH (DATE1)
,那么 MONTH (RESULT) = 12 + MONTH (DATE1)-MONTH (DATE2)。
   然后,将 YEAR (DATE2) 递增 1。

YEAR (RESULT) = YEAR (DATE1)-YEAR (DATE2)。

例如, DATE ('3/15/2000')-'12/31/1999' 的结果为 215 (或者,持续时间为 0 年, 2 个月和 15 天)。

递增和递减日期

将持续时间添加到日期或从日期中减去持续时间的结果本身就是日期。 (对于此操作,月份表示相当于日历页面。 将月份添加到日期,就像翻开日历的页面一样,从显示日期的页面开始。) 结果必须介于 1 月 1 , 0001 和 9999 年 12 月 31 日 (含) 之间。

如果添加或减去年份持续时间,那么仅影响日期的年份部分。 月不变,如日,除非结果会是非跨年的 2 月 29 日。 在这种情况下,日期更改为 28 ,将 SQLSTATE "01506" 分配给 SQL 诊断区域中的 RETURNED_SQLSTATE 条件区域项 (或者将 SQLCA 中的 SQLWARN6 设置为 "W") 以指示月末调整。

同样,如果添加或减去月的持续时间,那么仅影响月数,并且在必要时影响年数。 除非结果无效 (例如, 9 月 31 日) ,否则日期的日期部分保持不变。 在这种情况下,该日期设置为该月的最后一天,并且 SQLCA 中的 SQLWARN6 设置为 "W" 以指示月末调整。

当然,添加或减去天数的持续时间将影响日期的日期部分,并可能影响月份和年份。 添加标记为 DAYS 的持续时间不会导致月末调整。

日期持续时间 (无论是正数还是负数) 也可以添加到日期并从日期中减去。 与带标签的持续时间一样,结果是有效日期,只要需要进行月末调整,就会在 SQLCA 中设置警告指示符。

如果将正日期持续时间添加到某个日期,或者从某个日期中减去负日期持续时间,那么该日期将按指定的年数,月数和天数按该顺序递增。 因此, DATE1 + X (其中 X 是正 DECIMAL (8, 0) 数字) 等同于表达式:

  • DATE1 + YEAR (X) YEAR + MONTH (X) MONTH + DAY (X) DAYS

当从日期中减去正日期持续时间,或将负日期持续时间添加到日期时,该日期将按指定的天数,月数和年数 (按该顺序) 递减。 因此, DATE1 -X (其中 X 是正 DECIMAL (8, 0) 数字) 等同于表达式:

  • DATE1 -DAY (X) DAYS-MONTH (X) MONTH-YEAR (X) YEAR
注: 如果将一个或多个月添加到给定日期,然后从结果中减去相同的月数,那么最终日期不一定与原始日期相同。

另请注意,逻辑上等效的表达式可能不会产生相同的结果。 例如:

  • (DATE ('2002-01-31') + 1 MONTH) + 1 MONTH 将生成日期 2002-03-28。

不会产生与此相同的结果

  • DATE ('2002-01-31') + 2 MONTHS 将导致日期为 2002-03-31。

将标注的日期持续时间添加到日期并从日期中减去的顺序可能会影响结果。 为了与添加或减去日期持续时间的结果兼容,必须使用特定顺序。 将标记的日期持续时间添加到日期时,请按 "年 + 月 + 日" 顺序指定这些日期持续时间。 当从日期中减去标注的日期持续时间时,请按 "天-月-年" 的顺序指定这些日期持续时间。 例如,要将一年零一天添加到日期,请指定:

  • DATE1 + 1 年 + 1 天

要从日期减去一年,一个月和一天,请指定:

  • DATE1 -1 DAY-1 MONTH-1 YEAR