首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日数YTD和MTD

日数YTD和MTD
EN

Database Administration用户
提问于 2019-02-28 22:10:50
回答 1查看 629关注 0票数 -1

使用前一个月作为“结束”,我需要一个语法来计算/聚合YTD和MTD的天数。例如,如果今天是3/6,那么YTD的计算应该是1/1/2019到2/28/2019。同样,MTD的计算应为2/1/2019至2/28/2019。如果今天是一月,MTD是12月1日-12月31日,YTD是1月1日-12月31日.

EN

回答 1

Database Administration用户

回答已采纳

发布于 2019-02-28 22:22:46

不要去想一个时期的结束,想想下一个时期的开始。您希望在年初或之后(或前一个月),以及在本月底开始之前,一切都要完成。通过这种方式,您可以编写在列或参数的数据类型更改时不会受到舍入问题影响的查询。

就YTD而言:

代码语言:javascript
复制
DECLARE @thismonth date = DATEADD(DAY, 1-DAY(GETDATE()), GETDATE());

...
WHERE col >= DATEFROMPARTS(YEAR(DATEADD(MONTH, -1, @thismonth)), 1, 1)
  AND col <  @thismonth;

中期发展:

代码语言:javascript
复制
DECLARE @thismonth date = DATEADD(DAY, 1-DAY(GETDATE()), GETDATE());

...
WHERE col >= DATEADD(MONTH, -1, @thismonth)
  AND col <  @thismonth;

如果你只需要数一数,那就是

代码语言:javascript
复制
-- YTD
SELECT DATEDIFF
(
  DAY,
  DATEFROMPARTS(YEAR(DATEADD(MONTH, -1, @thismonth)), 1, 1),
  @thismonth
); 

-- MTD
SELECT DATEDIFF
(
  DAY, 
  DATEADD(MONTH, -1, @thismonth),
  @thismonth
);

关于四舍五入问题的一些背景知识,以及为什么不想计算期间的“结束”或使用BETWEEN进行日期范围查询的原因:

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/231005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档