如何在Presto中选取Hive表日期字段的当月第一天?
解决Presto中获取日期对应当月第一天的问题
我之前把Hive SQL迁移到Presto的时候也踩过这个坑!Hive里的TRUNC(date,'MM')语法在Presto里确实不生效,不过别担心,有两种简单的替代方案可以实现相同的需求:
方法一:使用date_trunc()函数
这是Presto官方推荐的标准方法,直接指定截断到month维度,就能得到当月第一天的timestamp类型结果,如果需要转换成纯日期类型,再套一层cast()即可。
示例代码:
-- 假设你的日期字段名为order_date,表名为hive_order_table SELECT CAST(date_trunc('month', order_date) AS DATE) AS first_day_of_month FROM hive_order_table;
date_trunc('month', order_date)会返回类似2024-05-01 00:00:00.000的timestamp值,转换成DATE类型后就是纯净的当月第一天日期。
方法二:通过日期偏移计算
如果习惯用更直观的日期运算逻辑,可以先提取当前日期的天数,再用date_add()往前偏移(当前天数-1)天,同样能得到当月第一天:
示例代码:
SELECT date_add('day', 1 - EXTRACT(DAY FROM order_date), order_date) AS first_day_of_month FROM hive_order_table;
比如当前日期是2024-05-15,提取天数是15,1-15=-14,日期往前减14天就是2024-05-01,完美得到当月第一天。
两种方法都能稳定实现需求,个人更推荐第一种,因为代码更简洁可读性更强,也是Presto的标准用法。
内容的提问来源于stack exchange,提问作者ericbrownaustin
相关产品推荐
相关产品推荐

