在 where 语句中使用星期几

问题描述

使用 HIVE sql,我目前有一个使用以下语句每周日运行的查询

Select * from tableA
where date between date_add(current_date,-7) and date_Add(current_Date,-1)

如果发生某些事情并且此代码必须在星期一运行,我必须手动将日期添加到 -8 和 -2。有没有办法让它从上周日运行到上周六,这样我每次运行时都不必手动更改数字。

解决方法

上一个星期日是:next_day(date_sub(current_date,7),'SUN')

上一个星期六是:next_day(date_sub(current_date,'SAT')

我猜你需要在星期天之前(减去 -14)

Select * from tableA
  where date between next_day(date_sub(current_date,14),'SUN') 
         and next_day(date_sub(current_date,'SAT')

如果在今天 (2021-04-28) 执行,它会给出 2021-04-18 (Sunday) 和 2021-04-24 (Sat)

如果在 2021-04-26(星期一)执行,它会给出相同的 2021-04-18(星期日)和 2021-04-24(星期六)

如果在本周的任何一天执行,除了最后一天星期六 (2021-05-01),这将起作用。如果在星期六执行,它将选择 2021-05-01 作为结束日期和 2021-04-18 作为开始日期。

如果您需要这也可以正常工作,如果在星期六 2021-05-01 也执行, 您可以将开始日期计算为 date_sub(next_day(date_sub(current_date,'SAT'),6)(周六减 6)