1

私はDB2 UDFを作成して、日付を入力して何ヶ月も追加した新しい日付を返します。このステップのためのクエリ構文は、私は、これはそれが言う追加された日付を戻すDB2 UDF?

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

動作させることはできませんUDF内部

select date + 12 months from sysibm.sysdummy1; 

を使用することです

SQL状態:42816 ベンダコード: -182 メッセージ:[SQL0182]日付、時刻、またはタイムスタンプ式が無効です。原因。 。 。 。 。 :次のいずれかが発生しました: - 加算のオペランドは日付であり、もう1つは日付期間ではありません。 - 加算のオペランドは時間であり、もう一つは時間ではありません。 - 加算のオペランドはタイムスタンプであり、もう一方は継続時間ではありません。 - 減算のオペランドは日付であり、もう一方は日付、文字、または日付期間ではありません。 - 減算のオペランドは時間であり、もう1つは時間、文字、または時間ではありません。 - 減算のオペランドはタイムスタンプであり、もう1つはタイムスタンプ、文字、または期間ではありません。回復。 。 。 :有効な日付、時刻、またはタイムスタンプ式を含むように算術式を訂正してください。リクエストをもう一度お試しください。

+0

はエラーAはコンパイル時エラー(プロシージャを作成できますか?)または実行時エラー? Create Procedure stmt全体を投稿できますか? –

+1

2008年1月のDB2 for IBM i 6.1以降で使用可能なDB2スカラー関数ADD_MONTHSを使用しない理由。当時のv5r4にはおそらくまだありますか?参考:「IBM i 7.2->データベース - >参照 - > SQL参照 - >組み込み関数 - >スカラー関数 - > ADD_MONTHS」の最新リリース文書(http://www.ibm.com/support/knowledgecenter) /en/ssw_ibm_i_72/db2/rbafzscaaddmonths.htm) – CRPence

答えて

1

それは簡単な修正です:

set result = inputDate + monthsToAdd MONTHS; 
+0

Ianさん、ありがとうございました。私はそれ以前に試しましたが、「文の終わりがありません」というメッセージが表示されません。 –

+0

@ZoHasおそらく、 'SET'と' RESULT '、そして単に' RETURN inputDate + monthsToMountToAdd MONTHS' NB、セミコロンがないことを意味する – CRPence

1
[私は7.3ともIBMのためのDB2で]として、実際のi5/OS用V5R3のDB2上でスクリプト

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 
+1

注:上記でADD_MONTHS名が選択されたため、修飾されていない参照は、システムが提供するスカラー関数を使用して新しいクエリを作成するか、利用可能な場合は表示されます。つまり、作成と使用がIBM i 6.1より前のリリースから始まり、DB2 for iが最初にそのスカラーを提供すると仮定します。 – CRPence

関連する問題