两个月份,如何取中间的月份

两个月份,如何取中间的月份,比如:202105,202101就得到202103,如果中间是两个月份就取前一个月份,202106,202101就得到202103

FineReport 不认识路的司机 发布于 2021-7-23 11:27
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
free_zzLv6中级互助
发布于2021-7-23 11:42(编辑于 2021-7-23 11:49)

不管中间是两个月份还是单个月份,都可以用这个

INDEXOFARRAY(RANGE(202101,202105,1),CEILING(count(RANGE(202101,202105,1))/2))

最佳回答
0
axingLv6专家互助
发布于2021-7-23 11:58

要考虑两个月份有跨年的情况,因此要先将月份转化为日期格式

format(monthdelta(format(CONCATENATE("202101","01"),"yyyy-MM-dd"),trunc(DATEDIF(format(CONCATENATE("202101","01"),"yyyy-MM-dd"),format(CONCATENATE("202105","01"),"yyyy-MM-dd"),"M")/2)),"yyyyMM")

修改这三处即可

image.png

最佳回答
0
杨朝健Lv5中级互助
发布于2021-7-23 12:10

月份1+floor((月份2-月份1)的月份数/2)

最佳回答
0
程琼Lv4初级互助
发布于2021-7-23 13:21(编辑于 2021-7-23 13:39)

提供以下三个公式,嫌字多懒得看的话,直接用第三个公式就行。顺便打包了我的测试cpt,有需要可以导下来自己看。

MONTHDELTA(DATE(LEFT(B2, 4), RIGHT(B2, 2), 1), int(DATEDIF(DATE(LEFT(A2, 4), RIGHT(A2, 2), 1), DATE(LEFT(B2, 4), RIGHT(B2, 2), 1), "M") / 2))

效果如下:图片.png图片.png图片.png

上面是月份1绝对不小于月份2的公式。如果月份1和月份2不确定哪个一定更大的话,用下面这个公式MONTHDELTA(if(A2>B2,DATE(LEFT(B2, 4), RIGHT(B2, 2), 1),DATE(LEFT(A2, 4), RIGHT(A2, 2), 1)), int(DATEDIF(DATE(LEFT(A2, 4), RIGHT(A2, 2), 1), DATE(LEFT(B2, 4), RIGHT(B2, 2), 1), "M") / 2))

效果如下:图片.png图片.png图片.png

以上两个公式得出的其实是年月日的格式,所以我的单元格样式是这么设的。

图片.png

但如果有写入数据库的需要,必须实际值是6位的话,可以用以下第三个公式,单元格样式也不用改了。如果只是视图报表使用的话,前两个公式就行了,不会影响导出。

FORMAT(MONTHDELTA(if(A2>B2,DATE(LEFT(B2, 4), RIGHT(B2, 2), 1),DATE(LEFT(A2, 4), RIGHT(A2, 2), 1)), int(DATEDIF(DATE(LEFT(A2, 4), RIGHT(A2, 2), 1), DATE(LEFT(B2, 4), RIGHT(B2, 2), 1), "M") / 2)),"yyyyMM")

图片.png

测试.cpt

  • 5关注人数
  • 506浏览人数
  • 最后回答于:2021-7-23 13:39
    请选择关闭问题的原因
    确定 取消
    返回顶部