Presto如何获取指定日期对应的上月最后一天?
在Presto中获取指定日期的上月最后一天
嘿,我懂你遇到的问题了——想拿到每个日期对应的上月最后一天,但直接用date_trunc('month', date) - 1报错,这是因为Presto确实不支持日期和整数直接做算术运算,得用专门的日期间隔语法来处理才行。
给你两个靠谱的解决方案:
方法一:截断到当月第一天后减一天
先通过date_trunc('month', date)把日期截断到当月的第一天,再减去1天的时间间隔,就能精准得到上月的最后一天。示例代码:
SELECT date_trunc('month', date('2018-04-03')) - interval '1' day AS lastdayofmonthprior;
执行这个语句会返回2018-03-31,完全符合你的需求。
方法二:先偏移到上月再取当月最后一天
另一种更直观的思路:先把日期往前推一个月,再用last_day()函数取这个日期所在月的最后一天。代码示例:
SELECT last_day(date_add('month', -1, date('2018-04-03'))) AS lastdayofmonthprior;
这个方法同样能得到2018-03-31,逻辑上更清晰——明确先定位到上月,再拿月末日期。
为什么你的原写法报错?
Presto的类型系统很严格,date_trunc返回的是date类型,而整数1没有时间单位,数据库根本不知道你要减的是1天、1小时还是1个月,所以必须用interval '1' day这种带单位的语法来指定时间间隔,才能和日期类型做运算。
内容的提问来源于stack exchange,提问作者ericbrownaustin
相关产品推荐
相关产品推荐

