Hive时间函数

时间戳位数

当时间戳有10 位时,可以转换到秒级。
13位的到毫秒。
注意转换!

天数

current_date 不是参数,只能取到当时真实的那天,所以如果要调度之前的日期,不可以用current_date,要把${date}转换成 ‘yyyy-MM-dd’ 的格式

${date}与current_date的转换

正确写法

unix_timestamp中必须是字符串,或者date形式
Current_date = from_unixtime(unix_timestamp(’${date}’,‘yyyymmdd’),‘yyyy-mm-dd’)

  • 本月第一天(current_date)

select date_sub(current_date,dayofmonth(current_date)-1)
2019-04-01

select from_unixtime(unix_timestamp(date_sub(current_date,dayofmonth(current_date)-1),‘yyyy-MM-dd’),‘yyyyMMdd’)
20190401

select date_format(current_date,‘yyyy-MM-01’)
2019-05-01

错误写法

select from_unixtime(${date},'yyyy-MM-dd')
-- 1970-08-23
	select from_unixtime(unix_timestamp(${date},'yyyymmdd'),'yyyy-mm-dd')
	-- 重点! 要加‘’变成字符串
select from_unixtime(unix_timestamp(date_format(current_date,'yyyy-MM-01'),'yyyy-MM-dd'),'yyyyMMdd')

20190501

  • 本月第一天(${date})
    select from_unixtime(unix_timestamp(date_format(from_unixtime(unix_timestamp(‘20190228’,‘yyyymmdd’),‘yyyy-mm-dd’),‘yyyy-MM-01’),‘yyyy-MM-dd’),‘yyyyMMdd’)

  • 本月第2天
    select date_sub(current_date,dayofmonth(current_date)-2)
    2019-04-02

  • 本月最后一天
    last_day(string date),返回这个月的最后一天的日期
    select last_day(current_date)
    2019-04-30
    select from_unixtime(unix_timestamp(last_day(current_date),‘yyyy-MM-dd’),‘yyyyMMdd’)
    20190430

  • 上个月
    select add_months(current_date, -1);
    2019-04-29

  • 下个月
    select add_months(current_date, 1);
    2019-06-29

  • 上月第一天
    select add_months(date_sub(current_date,dayofmonth(current_date)-1), -1);
    2019-04-01
    select from_unixtime(unix_timestamp(add_months(date_sub(current_date,dayofmonth(current_date)-1), -1),‘yyyy-MM-dd’),‘yyyyMMdd’)
    20190401

  • 上月最后一天

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值