【问题标题】: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())

【问题讨论】:

    标签: sql sql-server-2008 tsql if-statement between


    【解决方案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 中也不能用作过滤器,我得到函数参数计数错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多