【问题标题】:Query for date range based on day of the week根据星期几查询日期范围
【发布时间】:2015-04-27 18:08:47
【问题描述】:

我正在尝试查询显示当天和前一天的记录,但如果是星期一,则显示整个周末和当天的记录。

逻辑有效,但我无法让日期范围正常工作。我可以得到单一的工作日期。

IIf(Weekday(Date())=2,Date()-2,Date())

如果我尝试用这样的范围替换单个日期:

IIf(Weekday(Date())=2,Between Date()-2 And Date(),Between Date()-1 And Date())

Access 尝试从该查询引用的表中附加标签,如下所示。这会导致一个空的查询结果。

IIf(Weekday(Date())=2,([Table].[Reported Date]) Between Date()-2 And Date(),([Table].[Reported Date]) Between Date()-1 And Date())

我是 Access 的新手,所以我不太明白发生了什么以及为什么它会尝试添加这些标签。

如果我说错了,请告诉我。

【问题讨论】:

    标签: sql date ms-access iif


    【解决方案1】:

    between 的语法是:

    <value> between <lower bound> and <upper bound>
    

    所以这不是一个有效的表达式:

    Between Date()-2 And Date()
    

    尝试类似:

    YourColumn between Date()-2 and Date()
    

    或者,没有between

    Date()-2 <= YourColumn and YourColumn <= Date()
    

    【讨论】:

    • 当我执行其中任何一个操作时,Access 都不会抱怨,但我仍然有一个空查询。我应该写[OriginalTable].[Column] 还是只写[Column]?我应该提一下,只是写Column 会自动更改为"Column"
    • 你在哪里输入这些字符串?在 SQL 视图中还是在查询设计器的一部分中?
    • 是的.. 查询设计器。我将它作为 WHERE 参数输入到 SQL 视图而不是设计视图中,并且它起作用了。谢谢!
    【解决方案2】:

    您可以使用 DATEPART() 来获取星期几。例如 - 星期一被认为是 2。

    DatePart 函数使用 1-7,星期日为 1。

    例如

    声明您的变量并使用 DATEPART(w,GETDATE())。

    一旦你有了这个,你就可以使用你的条件:

    if (@todayDate_PT = 2)
         'query'
    else
         'query'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多