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