暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase数据库之ADD_MONTHS 函数分析

三金先生 2023-11-13
617

ADD_MONTHS 函数采用 DATETIME 或 DATE 表达式作为它的第一个参数,并需要第二个参 数指定要添加到第一个参数值上的月数。第二个参数可为正的或负的。

返回的值是基于第二个参数指定的月数,作为 INTERVAL UNITS MONTH 值的第一个参数的 DATE 或 DATETIME 值的总和。

返回的数据类型依赖于第一个参数的数据类型:

⚫ 如果第一个参数求值为 DATE 值,则 ADD_MONTHS 返回 DATE 值。

⚫ 如果第一个参数求值为 DATETIME 值,则 ADD_MONTHS 返回 DATETIME YEAR TO FRACTION(5) 值,对于时间单位小于 day 的,其值与第一个参数中的相同。

如果在第一个参数中的 day 和 month 时间单位指定该月的最后一天,或如果结果月的天数少于第 一个参数中的 day,则返回的值为结果月的最后一天。否则,返回的值与第一个参数为该月的同一 天。

如果结果月晚于第一个参数中那年的十二月(或对于负的第二个参数,早于一月),则返回的值可 在不同的年份中。

下列查询使用列表达式作为参数,在 Projection 子句中调用 ADD_MONTHS 函数两次。在此,列 名称表明列数据类型,且 DBDATE 设置为 MDY4/: 

SELECT a_serial, b_date, ADD_MONTHS(b_date, a_serial), 

 c_datetime, ADD_MONTHS(c_datetime, a_serial)

 FROM mytab WHERE a_serial = 7;

在此示例中,ADD_MONTHS 返回 DATE 和 DATETIME 值:

a_serial 7

b_date 07/06/2007 

(expression) 02/06/2008

 c_datetime 2007-10-06 16:47:49.00000

 (expression) 2008-05-06 16:47:49.00000

如果您使用主变量来存储 ADD_MONTHS 的参数,但在准备时刻不知道该参数的数据类型,则 GBase 8s 假设数据类型为 DATETIME YEAR TO FRACTION(5)。如果在运行时刻,在已准备了该语句之后,用户为主变量提供 DATE 值,则数据库服务器发出错误 -9750。要防止此错误,请通过使用 强制转型来指定主变量的数据类型,如在此程序片断中所示:

sprintf(query, ",

 "select add_months(?::date, 6) from mytab");

EXEC SQL prepare selectq from :query; 

EXEC SQL declare select_cursor cursor for selectq; 

EXEC SQL open select_cursor using :hostvar_date_input; 

EXEC SQL fetch select_cursor into :var_date_output; 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论