文章 查看内容

如何自定义周

如何自定义周

180 0 函数专题 2024-7-18 15:54 发布者: 观小凡

有时候常规周(周一到周日)不能满足我们的业务场景,需要自定义周来实现。例如:如何实现周四到周三为一周?
 

有时候常规周(周一到周日)不能满足我们的业务场景,需要自定义周来实现。例如:如何实现周四到周三为一周?

  1. 首先了解一下获取星期几的函数dayofweek([日期])与获取第几周的函数weekofyear([日期])。

       Spark SQL当中 dayofweek() 函数是从星期日到星期六为一个周,也就是1到7,想得到常规星期需要 dayofweek([日期])-1。


  1. 实现周四到周三为一周,那么每周的四五六日都应该推迟到下个周当中。

case when dayofweek([日期]) in (1,5,6,7) 
then WEEKOFYEAR([日期])+1 
else WEEKOFYEAR([日期]) 
end

image.png

  1. 最终结果:可以看出按照标准星期(周一至周日也就是1至0),已经实现从周四到周三为一周。

image.png

  1. 使用函数 toDayOfWeek([日期]),先获取到该日期是星期几。

      toDayOfWeek, 将Date或DateTime转换为包含一周中的某一天的编号的UInt8(周一是1, 周日是7)类型的数字。

  1. 使用函数获取该日期是属于第几周。

      toWeek(日期[,模式]) ,返回Date或DateTime的周数。两个参数形式可以指定星期是从星期日还是星期一开始,以及返回值应在0到53还是从1到53的范围内。如果省略了mode参数,则默认 模式为0。

  1. 做判断,如果要实现周四-周三为自定义周,那么每周的周四、五、六、周日,这四天都要推迟到下周。

case when [返回星期几] in(4,5,6,7) then ([正常周]+1) else [正常周] end
  1. 效果如下:

image.png

【注意事项】:初始的日期字段必须是Date或是DateTime类型的,如果不是的话 需要做先做转换,toDate/toDateTime函数的日期和日期时间格式定义:YYYY-MM-DD 或者 YYYY-MM-DD hh:mm:ss


路过

雷人

握手
1

鲜花

鸡蛋

刚表态过的朋友 (1 人)

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2024 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部