DB2 UDF返回添加日期?

时间:2011-01-25 06:57:13

标签: sql stored-procedures db2 user-defined-functions ibm-midrange

我正在尝试创建一个DB2 UDF,它接受输入日期并返回添加了几个月的新日期。此步骤的查询语法是使用

 select date + 12 months from sysibm.sysdummy1;

在UDF内部,我无法使其正常工作

monthsToAdd INTEGER;
SET monthsToAdd=4;
set result= inputDate + monthsToAdd + MONTHS;
return result;

它说

  

SQL状态:42816   供应商代码:-182   消息:[SQL0182]日期,时间或时间戳表达式无效。原因。 。 。 。 。 :发生以下情况之一: - 添加的操作数是日期,另一个不是日期持续时间。 - 加法的操作数是时间而另一个不是持续时间。 - 加法的操作数是时间戳,另一个不是持续时间。 - 减法操作数是日期,另一个不是日期,字符或日期持续时间。 - 减法的操作数是时间而另一个不是时间,字符或持续时间。 - 减法的操作数是时间戳,另一个不是时间戳,字符或持续时间。恢复。 。 。 :更正算术表达式,使其包含有效的日期,时间或时间戳表达式。再次尝试请求。

2 个答案:

答案 0 :(得分:1)

这是一个简单的解决方法:

set result = inputDate + monthsToAdd MONTHS;

答案 1 :(得分:1)

实际上在v5r3 DB2 for i5 / OS [以及DB2 for IBM i 7.3]上编写脚本:

create function add_months             
( inputDate   DATE                     
, monthsToAdd INTEGER                  
) returns DATE                         
language SQL DETERMINISTIC             
  RETURN inputDate + monthsToAdd MONTHS

select add_months(date'2016-04-12', 6)
from sysibm.sysdummy1
-- likeness of a report from above query follows:
ADD_MONTHS
2016-10-12