我使用GENERATE_DATE_ARRAY获取两个日期之间的所有月底日期。根据文档,实际上,GENERATE_DATE_ARRAY支持INTERVAL部分中的月份关键字:
SELECT GENERATE_DATE_ARRAY('2020-12-31', '2022-03-31', INTERVAL 1 MONTH)
不幸的是,正如您所看到的,结果是非常糟糕的:
看起来在二月份之后,这个过程就被搞砸了,直到最后一天才结束,直到月底的28天。
我遗漏了什么吗?或者这是个窃听器?
发布于 2022-10-17 13:36:00
正如@Jaytiger 评论所指出的那样,这可能是预料中的事情,尽管没有清楚的记录。在一些日期函数的文档中(例如,请参见添加文档):
当日期在(或接近)月份的最后一天时,需要对月份、季度和年份的部分进行特殊处理。如果结果月份的天数少于原始日期的日期,则结果日期是该月份的最后一个日期。
作为一种解决办法,如果您想获得EOM日期,可以使用此方法:
SELECT DATE_SUB(day, INTERVAL 1 DAY) FROM
UNNEST(GENERATE_DATE_ARRAY('2021-01-01', '2022-04-01', INTERVAL 1 MONTH)) day
换句话说,与其生成EOM日期,不如生成月开始日期并减去一天。
另一种方法是使用@Mikhail在他的回复中建议的方法。
https://stackoverflow.com/questions/74097389
复制相似问题