使用函数SQL在两个日期之间

时间:2013-08-15 16:03:42

标签: sql ms-access between

我想从上个月的20日提取数据到现在,但是在制作BETWEEN AND命令时是否无法创建函数?

WHERE ([dtUpdated] BETWEEN ((Year(Date()))-(Month(Date())-1)-20)
    AND (Date()))

2 个答案:

答案 0 :(得分:3)

您可以使用DateAdd从今天的日期开始减去一个月。以下是立即窗口中的示例。

? Date()
8/15/2013 
? DateAdd("m", -1, Date())
7/15/2013 

然后,您可以确定该上一个日期的YearMonth

? Year(DateAdd("m", -1, Date()))
 2013 
? Month(DateAdd("m", -1, Date()))
 7 

最后,您可以DateSerial YearMonth和20作为日期。{/ p>

? DateSerial(Year(DateAdd("m", -1, Date())), _
    Month(DateAdd("m", -1, Date())), 20)
7/20/2013 

在查询中,请尝试这样......

WHERE [dtUpdated] BETWEEN
    DateSerial(
        Year(DateAdd("m", -1, Date())),
        Month(DateAdd("m", -1, Date())),
        20)
    AND Date()

答案 1 :(得分:0)

看起来你试图通过将数字设置为'yyyy-mm-dd'之类的日期格式来创建日期,但实际上你只是减去一堆数字(2013-3-5 = 2005)所以我猜你的类型不匹配。

我认为MS Access具有DATEADD功能,您可以通过算术建立日期。

如果你想要从上个月20日开始就会像

那样
  1. 添加-1 *当前天数(减去当月的天数)
  2. 添加-1个月(上个月)
  3. 添加20天(获得第20个)
  4. 我认为会是这样的

    DATEADD(d, 20, DATEADD(m, -1 * Month(Date()), DATEADD(d, -1 * Day(Date()), Date())))
    

    这可以通过后续的DATEADD调用

    来完成