我有一个名为 Work Done 的专栏,每天都会完成一些工作。它有列
Id, VoucherDt, 金额
现在我的报告有打印截至当月日期的金额总和的方案。例如,如果当前日期是 2013 年 9 月 3 日,则查询将选择 1 日、2 日和 3 日的所有记录并返回总和。我能够得到当月的第一个日期。我正在使用以下条件
VoucherDt between FirstDate and GetDate()
但它没有给出预期的结果。所以请建议我适当的where
条件。
我有一个名为 Work Done 的专栏,每天都会完成一些工作。它有列
现在我的报告有打印截至当月日期的金额总和的方案。例如,如果当前日期是 2013 年 9 月 3 日,则查询将选择 1 日、2 日和 3 日的所有记录并返回总和。我能够得到当月的第一个日期。我正在使用以下条件
VoucherDt between FirstDate and GetDate()
但它没有给出预期的结果。所以请建议我适当的where
条件。
我认为可能有更好的解决方案,但这应该可行:
where YEAR(VoucherDt) = YEAR(CURRENT_TIMESTAMP)
and MONTH(VoucherDt) = MONTH(CURRENT_TIMESTAMP)
and DAY(VoucherDt) <= DAY(CURRENT_TIMESTAMP)
SELECT SUM(AMOUNT) SUM_AMOUNT FROM <table>
WHERE VoucherDt >= DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP), 0)
AND VoucherDt < DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP), 1)
尝试计算从您可以存储在日期时间中的第一个日期到目标日期的月数。
SELECT SUM(amount)
FROM
(
SELECT 100000 AS amount, '2013-09-03' AS dt
UNION ALL SELECT 10000, '2013-09-02'
UNION ALL SELECT 1000, '2013-09-01'
UNION ALL SELECT 100, '2013-08-02'
UNION ALL SELECT 10, '2013-01-31'
UNION ALL SELECT 2, '2012-09-03'
UNION ALL SELECT 2, '2012-09-02'
UNION ALL SELECT 1, '2012-09-01'
) SourceData
WHERE DATEDIFF(m, '1900-1-1', GETDATE()) = DATEDIFF(m, '1900-1-1', SourceData.dt)