《BI工程师必读》日期处理篇 #01

写在前面

我相信很多在做BI产品的小伙伴都会 遇到按周 月 季度 年进行数据的聚合的场景,比如说某个产品每周销售额 月销售额 季度销售额。目前我工作主要用到的几种SQL引擎有MySQL,Hive,Presto 。然后我这里把一些常见的操作整理一下,方便查阅。

后面我也有 慢慢更新这个 系列的文章,我会把我这块工作相关的一些体会进行分享,绝对实用~欢迎关注,

– 1.mysql

-- 当天日期 
select  date(now())
select date_sub(current_date,interval dayofweek(current_date) day)

select   weekday(current_date()) --   周日 6 周一 0 
select   dayofweek(current_date()) -- 周日 1 周一 2   

-- 当天日期的周一 :   
select date_sub(current_date(),interval weekday(current_date()) day)  --  用当前日期 - 距离周一的天数
-- 当天日期的周日
select date_sub(current_date(),interval -6+weekday(current_date()) day) --  用当前日期 -  (-6+距离周一的天数)

-- 当天日期的 对应的 当月1号 : 
select date_sub(current_date , interval dayofmonth(current_date) - 1 day)--  用当前日期 - 当天是当月的第几天 

-- 当天日期的 对应的 当月最后一天 : 
-- 这里提供一种思路,可以先把当天对应的上月的最后一天计算出来,然后再用lead之类的窗口函数取下一行数据

-- 当天日期的 对应的 当季度1号 : 
select (makedate(year(current_date), 1)  + interval quarter(current_date) quarter - interval 1 quarter)


-- 当天日期的 对应的 当年1号 : 
select makedate(year(current_date),1)

– 2.hive

-- 当天日期 
select  current_date,to_date(current_date),current_timestamp

-- 当天日期的周一 : 
-- 当天日期对应的下周1 :next_day(current_date,'mon')
select date_sub(next_day(current_date,'mon'),7)  -- 本周1
select date_sub(next_day(current_date,'tu'),7)   -- 本周2
select date_sub(next_day(current_date,'wed'),7)  -- 本周3
select date_sub(next_day(current_date,'th'),7)   -- 本周4
select date_sub(next_day(current_date,'fri'),7)  -- 本周5
select date_sub(next_day(current_date,'sat'),7)  -- 本周6
select date_sub(next_day(current_date,'sun'),7)  -- 本周天

-- 当天日期的 对应的 当月1号 : 
select trunc(current_date, 'mm')

-- 当天日期的 对应的 当季度1号 : 
select to_date(concat(year(current_date),'-',lpad(ceil(month(current_date)/3) * 3 -2,2,0),'-01'))

-- 当天日期的 对应的 当年1号 :
select trunc(current_date, 'yy')

– 3.presto

-- 当天日期
select  now(),current_date,current_timestamp


-- day_of_week(current_date)   周日 7 周一 1  
-- 当天日期的周一 : 
select  date_add('day',+1-day_of_week(current_date),current_date)
-- 当天日期的周天: 
select  date_add('day',+7-day_of_week(current_date),current_date)

-- day_of_month(current_date)  当月的第几天
-- 当天日期的 对应的 当月1号 : 
select  date_add('day',-day_of_month(current_date)+1,current_date)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值