日期算法
日期值可以减、加或减。
日期减法 :从另一个日期( DATE1 )减去一个日期( DATE2 )的结果是一个日期持续时间,它指定了两个日期之间的年数、月数和天数。 结果的数据类型为 DECIMAL(8,0)。 如果 DATE1 大于或等于 DATE2 ,则从 DATE1 中减去 DATE2。 如果 DATE1 小于 DATE2 ,则从 DATE2 中减去 DATE1 ,并将结果取负号。 以下程序描述阐明了操作步骤 RESULT = DATE1 - DATE2。
| 日期减法:结果 = date1 - date2 |
|---|
|
例如,DATE('3/15/2005') - '12/31/2004'的结果是215(即0年2个月15天的时长)。 在这个例子中,请注意第二个操作数无需转换为日期。 根据 SQL中日期时间算术项下描述的减法规则之一,如果第一个操作数是日期,则第二个操作数可以是日期的字符串表示形式。
日期的递增和递减 :在日期上增加一个持续时间,或从日期中减去一个持续时间,其结果本身也是一个日期。 (在本操作中,一个月相当于一个日历页面。 因此,在日期上添加月份就像翻日历一样,从显示日期的那一页开始。) 结果必须介于公元2000年1月1日至公元1999年12月31日之间。 如果增加或减少年数,则仅日期的年份部分会受到影响。 月份和日期不变,除非结果为闰年2月29日。 此处,结果中的日期部分被设置为28,SQLCA中的 SQLWARN6 字段被设置为W,表示进行了月末调整,以更正无效日期。 SQLCA字段的描述也描述了如何设置 SQLWARN6。
同样,如果增加或减少几个月的时间,则只会影响几个月,必要时也会影响几年。 日期中的日期部分保持不变,除非结果无效(例如9月31日)。 在这种情况下,日期被设置为当月的最后一天,SQLCA的 SQLWARN6 字段被设置为W以表示调整。
当然,增加或减少天数会影响日期中的日部分,并可能影响月和年。 增加或减少天数不会导致月底调整。
日期的持续时间(无论是正值还是负值)也可以在日期中加减。 与标注的持续时间一样,结果是一个有效日期, SQLWARN6 被设置为W,以指示任何必要的月末调整。
DATE1 + YEAR(X) YEARS + MONTH(X) MONTHS + DAY(X) DAYS DATE1 - DAY(X) DAYS - MONTH(X) MONTHS - YEAR(X) YEARS将日期加一个月等于一个月后的同一天,除非该日期在一个月后不存在。 在这种情况下,结果中的日期将设置为较晚月份的最后一天。 例如,1月28日加1个月等于2月28日;1月29日、30日或31日加1个月等于2月28日,如果是闰年,则等于2月29日。 如果给定日期增加了一个或多个月份,然后从结果中减去相同数量的月份,则最终日期不一定与原始日期相同。
(DATE('2005 01 31') + 1 MONTH) + 1 MONTH -- results in 2005-03-28
DATE('2005 01 31') + 2 MONTHS -- results in 2005-03-31 DATE1 + 1 YEAR + 1 DAY DATE1 - 1 DAY - 1 MONTH - 1 YEAR