是否能支持函数 months_between/add_months

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】

【概述】 场景 + 问题概述
希望能支持类似Oracle中的add_months,months_between函数.

【应用框架及开发适配业务逻辑】

【业务影响】
当前支持的月份加减函数对月末处理(主要是涉及到2月末)和实际业务中使用的逻辑不完全匹配.
需要支持月份处理能满足月末+加减月份后,结果依然是月末.
参考结果如下:
add_months(‘2019-2-28’,1)=2019-3-31
add_months(‘2020-2-28’,1)=2020-3-28
add_months(‘2020-2-29’,1)=2020-3-31
add_months(‘2020-2-28’,-1)=2020-1-28
add_months(‘2020-2-29’,-1)=2020-1-31
add_months(‘2020-3-31’,-1)=2020-2-29
add_months(‘2020-3-30’,-1)=2020-2-29
add_months(‘2020-3-29’,-1)=2020-2-29
add_months(‘2019-2-28’,-1)=2019-1-31
add_months(‘2019-3-31’,-1)=2019-2-28

参考hive中的实现代码如下:
https://github.com/pingcap/tidb/issues/27134

【TiDB 版本】
5.7.25-TiDB-v5.1.0


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

请清晰准确地描述问题场景、需求行为及背景信息,更有利于产品同学及时跟进需求*
【需求涉及的问题场景】
【期望的需求行为】
【需求可替代方案】
【背景信息】
如哪些用户将从中获益,以及一些使用场景,任何API设计,模型或者图标都会更有帮助。

需要支持月份处理能满足月末+加减月份后,结果依然是月末.

在我们目前的银行系统中的日期计算,月末相加减依然是月末.而目前tidb算出来则不完全是,差异主要在于2月末的处理.
比如2020年02月29日+1月 应该为2020年3月31 但是目前系统中结果为2020年3月29日.

1 个赞

@qizheng 老师帮忙看下需求~

你好,需求已记录,据了解最近的产品 roadmap 暂时没有计划支持 oracle 的这些函数。

目前对于日期增加n个月和日期相减获取月数 的功能可以先用 date_add(date1,INTERVAL N MONTH) 和 datediff(date1,date2) 函数计算后再换算成需要的结果。