mysql查询最近一个自然周_hive 获取自然周

选择一个周一的相对日期 比如 2018-01-01 是周一

假如当前时间是 p0,那查询当前时间的自然周的周一日期

select date_sub({p0},pmod(datediff({p0}, '2018-01-01'), 7))

select date_sub('2020-04-15',pmod(datediff('2020-04-15','2018-01-01'),7))

-- 输出结果为 2020-04-13

跨年自然周的处理

现象:

查询当前日期是这一年的第几周 可以使用如下方法

select weekofyear(Fcurrent)

select date_format(Fcurrent,'yyyyww')

-- 比如

select weekofyear('2020-04-01') -- 输出 14

select date_format('2020-04-01','yyyyww') -- 输出202014 代表2020年的第14周

-- 但是如果时间是跨年的情况 比如

select weekofyear('2019-12-30') -- 输出 1

select date_format('2019-12-30','yyyyww') -- 输出 201901

原因:

在java 中使用Calendar 处理周的时候也有这种情况,一年的第一周 的设置有如下参数

calendar.setFirstDayOfWeek(Calendar.MONDAY); -- 默认周一为一周的开始时间

calendar.setMinimalDaysInFirstWeek(4); --第一周的最小天数必须是4天以上

处理

想要得到正确的结果

select year(date_sub(next_day(date_sub(current_date,1),'MO'),4))*100+weekofyear(date_sub(current_date,1));

--- next_day('时间','下周几')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值