在HIVE中选择每月的第一天

4

我正在使用类似于SQL的Hive,但语法可能与SQL用户略有不同。我查看了其他的stackoverflow,但它们似乎都是使用不同语法的SQL。

我正在尝试通过此查询获取本月的第一天。这个查询给出了今天的日期。例如,如果今天是2015年4月30日,则结果将是2015年4月1日。谢谢!

select 
    cust_id,
    FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') as first_day_of_month_transaction
--DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) as first_day_of_month_transaction --SQL format. Not compatible in Hive.
from 
    customers;
5个回答

21

试一试

date_format(current_date,'yyyy-MM-01')

很棒的解决方案。简洁而美观! - TheNeil

11

要获取月份的第一天,可以使用:

date_add(<date>,
         1 - day(<date>) )

应用于您的表达式:

date_add(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'),
         1 - day(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')) 
        )

但是这对于任何格式正确的列都适用。


这实际上给了我2015年5月29日,而不是该月的第一天。 - sharp
@sharp...我已经修复了。该函数应该是date_sub()或符号反转。 - Gordon Linoff
谢谢,现在它可以工作了。我在查询中没有使用date_sub()。我完全按照上面的方法来做的。 - sharp

6

使用SELECT TRUNC(rpt.statement_date,'MM')将会得到该月的第一天。


这个是一个更简单的解决方案。 - Jasper_Li

3
您可以使用此查询来计算当前月份的第一天。
Select date_add(last_day(add_months(current_date, -1)),1);

你可以使用日期字段名称来代替 current_date。

  • last_day => 给出当前月份的最后一天
  • add_months with -1 => 给出上一个月
  • date_add with 1 => 增加一天

1
另一种方法 - 选择 concat(substring(current_date,1,7),'-01');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接