获取今天和明天的记录,忽略周末

Posted

技术标签:

【中文标题】获取今天和明天的记录,忽略周末【英文标题】:Fetch records for today and tomorrow, ignoring weekends 【发布时间】:2017-01-09 12:23:33 【问题描述】:

我刚刚设置了下面的过滤器,只检索今天和明天的项目(效果很好):

BETWEEN  fn CURDATE()  AND DATEADD(day; 1; GETDATE())

但是在星期五我也必须得到星期一的物品 - 我正在尝试围绕这个设置一个 IF 语句,但我一点运气都没有。下面是一个示例(不起作用),但我不知道如何正确编写它:

IF DATEPART(WEEKDAY, GETDATE()) IN (6)
THEN BETWEEN  fn CURDATE()  AND DATEADD(day; 3; GETDATE())
ELSE BETWEEN  fn CURDATE()  AND DATEADD(day; 1; GETDATE())

【问题讨论】:

【参考方案1】:

怎么样:

where (datepart(weekday, getdate()) = 6 and
       datecol between cast(getdate() as date) and cast(getdate() + 3 as date)
      ) or
      (datepart(weekday, getdate()) <> 6 and
       datecol between cast(getdate()as date) and cast(getdate() + 1as date)
      ) 

注意:我不喜欢在日期/日期时间中使用 between。 Aaron Bertrand 有一篇很好的 blog 帖子解释了这一点。 BETWEEN 对日期来说是安全的,所以我将按照您指定的逻辑保留它。

【讨论】:

没有运气运行上述内容,当我直接将其输入 SQL 时,我在“cast”附近得到不正确的语法,预期为“AS”。在 MSSQL Studio 2k8 中也不能用作过滤器,我得到函数参数计数错误。

以上是关于获取今天和明天的记录,忽略周末的主要内容,如果未能解决你的问题,请参考以下文章

js获取日期:昨天今天和明天后天

js 获取昨天,今天和明天的年月日格式

Moment.js - 明天、今天和昨天

怎么用sql查询昨天,今天,明天和本周的记录

如何使用 DateFormatter 显示昨天、今天和明天

如何在当前日期和当前日期 + 2 之间提取数据但不包括周末?