【问题标题】:Using day of the week in where statement在 where 语句中使用星期几
【发布时间】:2021-07-21 23:40:40
【问题描述】:

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

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

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

【问题讨论】:

  • 这是 Microsoft SQL 服务器吗? MySql,甲骨文? SQLite?
  • @Ahmad我道歉。我更新了原始帖子,建议我使用的是 HIVE SQL。

标签: sql date hive hiveql dayofweek


【解决方案1】:

上周日是: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 年 5 月 1 日星期六执行,也可以正常工作, 您可以将开始日期计算为date_sub(next_day(date_sub(current_date, 7), 'SAT'),6)(星期六减 6)

【讨论】:

  • 这将在星期一工作以获取前一周的星期日(8 天前)而不是星期日的前一天(1 天前)?
猜你喜欢
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 2014-07-25
  • 1970-01-01
  • 2020-08-24
  • 2013-12-31
相关资源
最近更新 更多