获取今天和明天的记录,忽略周末
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 中也不能用作过滤器,我得到函数参数计数错误。以上是关于获取今天和明天的记录,忽略周末的主要内容,如果未能解决你的问题,请参考以下文章