2

我想检索当月 1 -30 之间的数据 [我正在使用 MSACCESS Dbase 这样做] 下面是我正在尝试的查询 -

SELECT count(usercategory) as category_count ,usercategory  FROM user_category 
where IssueDate between DATEADD('m', DATEDIFF('m', 0, DATE()) - 0 , 0) and  DATEADD('m',     DATEDIFF('m', 0, DATE()) + 1, - 1 ) group by usercategory

我在 MSACCESS Dbase 中保存的数据 -

Category1   9/7/2013 12:00:00 AM
Category1   9/8/2013 12:00:00 AM
Category2   10/8/2013 12:00:00 AM

所以输出应该只有 2 条记录,但我的查询没有给出结果

4

1 回答 1

1

这是我认为您需要的查询。它使用的所有函数在 Access SQL 中始终可用,无论查询是从 Access 会话中运行还是从外部运行(如在您的 c# 情况下)。

db 引擎将对这两个DateSerial表达式进行一次评估,然后使用它们的结果来过滤结果集。这种方法在索引上特别快IssueDate

SELECT
    Count(usercategory) AS category_count,
    usercategory
FROM user_category 
WHERE
        IssueDate >= DateSerial(Year(Date()), Month(Date()), 1)
    AND IssueDate < DateSerial(Year(Date()), Month(Date()) + 1, 0)
GROUP BY usercategory;

这是一个 Access Immediate 窗口会话,它解释了这些DateSerial表达式的逻辑......

? Date()
9/6/2013 
? Year(Date())
 2013 
? Month(Date())
 9 
' get the date for first of this month ...
? DateSerial(Year(Date()), Month(Date()), 1)
9/1/2013 
' now get the date for the last of this month ...
? DateSerial(Year(Date()), Month(Date()) + 1, 0)
9/30/2013 
于 2013-09-07T03:35:13.963 回答