在 where 语句中使用星期几

Using day of the week in where statement

使用 HIVE SQL,我目前有一个查询 运行s 每个星期天使用以下语句,

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, 7), 'SAT')

我猜你需要一周前的星期天(减去 -14)

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

如果今天 (2021-04-28) 执行,它会给出 2021-04-18(星期日)和 2021-04-24(星期六)

如果在 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, 7), 'SAT'),6)(星期六减去 6)