Access、DateSerial 函数导致结果不准确(用户输入 2 位月份数字)

Access, DateSerial function causing inaccurate results (user inputs 2 digit month number)

下面显示的查询 returns 本年度的月度结果。为了根据用户输入的月份数字创建一个只有 returns 一个月结果的新查询,我修改了涉及查询的 DateSerial 函数的最后 5 行代码。

问题是新查询的结果在几个月内略有不同。是什么导致两个查询之间的结果不匹配?除了最后 5 行的 DateSerial 函数外,代码没有更改。

新查询的最后5行代码

 FROM (SELECT DateSerial(Year(Date()),[Enter 2 digit month number],1) AS month_start, 
    DateAdd("d", -1, DateSerial(Year(Date()),[Enter 2 digit month number],31)) AS month_end 
    FROM SALES_RECEIPT 
    WHERE sale_date between DateSerial(Year(Date()), [Enter 2 digit month number], 1) and DateSerial(Year(Date()),[Enter 2 digit month number]+1, 0)
    GROUP BY Year(sale_date), Month(sale_date))  AS months;

查询当年returns个月的结果:

SELECT Format(DatePart("m",months.month_start),"00") & "/" & Year(months.month_start) AS [Month/Year],

(SELECT  Round(Nz(Sum(sales_receipt.SELLING_PRICE*sales_receipt.quantity),0),2)
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end) AS [Gross Sales],

(SELECT Round(Nz(Sum((Nz(inventory.VENDOR_ACTUAL_PRICE,0))*sales_receipt.quantity),0),2)
FROM SALES_RECEIPT INNER JOIN INVENTORY ON INVENTORY.INVENTORY_ID = SALES_RECEIPT.INVENTORY_ID
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end ) AS COGS,

(SELECT Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) - Nz(Sum(inventory.VENDOR_ACTUAL_PRICE * sales_receipt.quantity),0),2)
FROM INVENTORY  INNER JOIN SALES_RECEIPT ON INVENTORY.INVENTORY_ID = SALES_RECEIPT.INVENTORY_ID
WHERE SALES_RECEIPT.[SALE_DATE] between months.month_start and months.month_end) AS [Sales Margin],

(SELECT Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2)
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end and SALES_RECEIPT.SALES_TAX_EXEMPT="No") AS [Taxable Sales],

(SELECT Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2)
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end and SALES_RECEIPT.SALES_TAX_EXEMPT="Yes") AS [Tax Free Sales], 

(SELECT Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2) * .05
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end and SALES_RECEIPT.SALES_TAX_EXEMPT="No") AS [Total Sales Tax],

(Select Round(Nz(Sum(Shipping_CHARGES.Shipping_COST),0),2)
FROM SHIPPING_CHARGES
WHERE SHIPPING_CHARGES.ENTRY_DATE between months.month_start and months.month_end ) AS [Total Shipping Charges]

FROM (SELECT DateSerial(Year(sale_date), Month(sale_date), 1) AS month_start,
 DateAdd("d", -1,  DateSerial(Year(sale_date), Month(sale_date) + 1, 1)) AS month_end
 FROM SALES_RECEIPT
 WHERE sale_date between #1/1# And #12/31#
 GROUP BY Year(sale_date), Month(sale_date))  AS months;

以下是 DateSerial 函数代码的更正版本,它将 return 获得准确的结果。

FROM (SELECT DateSerial(Year(date()), [Enter 2 digit month number], 1) AS month_start,
DateAdd("d", -1,  DateSerial(Year(date()), [Enter 2 digit month number] + 1, 1)) AS month_end 
FROM SALES_RECEIPT
WHERE sale_date between DateSerial(Year(Date()), [Enter 2 digit month number], 1) and DateSerial(Year(Date()), [Enter 2 digit month number]+1, 0) 
GROUP BY Year(sale_date), Month(sale_date))  AS months;