BETWEEN 两个日期与函数 SQL

Posted

技术标签:

【中文标题】BETWEEN 两个日期与函数 SQL【英文标题】:BETWEEN two dates with functions SQL 【发布时间】:2013-08-15 16:03:42 【问题描述】:

我想提取上个月20号到现在的数据,但是做BETWEEN AND命令的时候不能做函数吗?

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

【问题讨论】:

你遇到了什么错误? 【参考方案1】:

您可以使用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 作为一天。

? 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()

【讨论】:

感谢帮助,我可以看到逻辑但我得到的参数太少了。我猜格式必须是 2013-07-20 而不是 2013/07/20 什么的。如果我在 #2013-07-20# AND Date() 之间手动输入,它会按预期工作(编辑:好的,如果我这样做 Date(Dateserial(.....)) AND Date() DateSerial 返回一个日期/时间值,因此格式应该不是问题。我刚刚在 Access 2007 中测试了这个查询,它没有错误地工作:SELECT * FROM tblFoo WHERE [datetime_field] BETWEEN DateSerial(Year(DateAdd("m", -1, Date())), Month(DateAdd("m", -1, Date())), 20) AND Date(); “参数太少”经常发生在SQL语句中拼写错误的情况下:表或字段名;函数名或函数的参数之一;或 SQL 关键字。此外,在所有 DateAdd 表达式中,您必须在 m 周围使用引号。【参考方案2】:

看起来您只是试图通过将数字放入“yyyy-mm-dd”之类的日期格式来确定日期,但实际上您只是减去一堆数字(2013-3-5 = 2005)所以我猜你遇到了类型不匹配。

我认为 MS Access 有一个 DATEADD 函数,您可以在其中通过算术建立日期。

如果你想从上个月 20 日开始,它会是这样的

    加 -1 * 当前日期数(减去当前月份的天数) 加-1个月(得到上个月) 加 20 天(取 20 天)

我想应该是这样的

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

这可以通过后续的 DATEADD 调用来完成

【讨论】:

语法为DateAdd(interval, number, date)interval必须是字符串表达式。

以上是关于BETWEEN 两个日期与函数 SQL的主要内容,如果未能解决你的问题,请参考以下文章

日期比较 BETWEEN vs < >

MySQL 用 BETWEEN AND 日期查询包含范围边界

MySQL 用 BETWEEN AND 日期查询包含范围边界

MySQL BETWEEN 两个日期时间不使用 INDEX

BETWEEN Two Dates 返回相同两个日期的行,而不是返回之间的行

日期函数ADD_MONTHS,MONTHS_BETWEEN