1

我正在尝试创建一个DB2 UDF,它将输入日期并返回新日期并添加了几个月。这一步的查询语法是使用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

是该错误的编译时错误(您可以创建过程吗?)还是运行时错误?你能发布整个创建过程吗? – 2011-01-26 13:19:54

+1

任何不使用DB2标量函数ADD_MONTHS的原因,自2008年1月的DB2 for IBM i 6.1开始提供;或许还在v5r4上?作为参考:在[IBM i 7.2->数据库 - >参考 - > SQL参考 - >内置函数 - >标量函数 - > ADD_MONTHS](http://www.ibm.com/support/knowledgecenter /en/ssw_ibm_i_72/db2/rbafzscaaddmonths.htm) – CRPence 2016-10-09 20:25:00

回答

1

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

set result = inputDate + monthsToAdd MONTHS; 
+0

谢谢伊恩,我早些时候尝试过,但它不会工作,它说'声明缺失' – 2011-01-26 04:57:38

1

由于实际脚本在V5R3 DB2针对i5/OS [并与DB2 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