我正在尝试创建一个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]日期,时间或时间戳表达式无效。原因。 。 。 。 。 :发生以下情况之一: - 添加的操作数是日期,另一个不是日期持续时间。 - 加法的操作数是时间而另一个不是持续时间。 - 加法的操作数是时间戳,另一个不是持续时间。 - 减法操作数是日期,另一个不是日期,字符或日期持续时间。 - 减法的操作数是时间而另一个不是时间,字符或持续时间。 - 减法的操作数是时间戳,另一个不是时间戳,字符或持续时间。恢复。 。 。 :更正算术表达式,使其包含有效的日期,时间或时间戳表达式。再次尝试请求。
答案 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