DB2 UDF 返回添加日期?

发布于 2024-10-14 06:44:09 字数 667 浏览 4 评论 0原文

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

 select date + 12 months from sysibm.sysdummy1;

Inside the UDF I can't get this to work

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

它说

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

I am trying to make a DB2 UDF that takes input a date and returns new date with some months added to it. The query syntax for this step is to use

 select date + 12 months from sysibm.sysdummy1;

Inside the UDF I can't get this to work

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

It says

SQL State: 42816
Vendor Code: -182
Message: [SQL0182] A date, time, or timestamp expression not valid. Cause . . . . . : One of the following has occurred: -- An operand of addition is a date and the other is not a date duration. -- An operand of addition is a time and the other is not a time duration. -- An operand of addition is a timestamp and the other is not a duration. -- An operand of subtraction is a date and the other is not a date, character, or date duration. -- An operand of subtraction is a time and the other is not a time, character, or time duration. -- An operand of subtraction is a timestamp and the other is not a timestamp, character, or duration. Recovery . . . : Correct the arithmetic expression so that it contains a valid date, time, or timestamp expression. Try the request again.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

叹倦 2024-10-21 06:44:09

这是一个简单的修复:

set result = inputDate + monthsToAdd MONTHS;

It's a simple fix:

set result = inputDate + monthsToAdd MONTHS;
沧笙踏歌 2024-10-21 06:44:09

正如在 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

As actually scripted on a v5r3 DB2 for i5/OS [and also with 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文