= DATEADD(Month, DATEDIFF(Month, 0, DATEADD(m-6ren">
gpt4 book ai didi

最近六个 "full"个月的 SQL

转载 作者:行者123 更新时间:2023-12-05 09:23:45 27 4
gpt4 key购买 nike

我有一个包含一个日期时间列的表。我只需要返回最近 6 个月的行。这可以通过

WHERE CloseTime >= DATEADD(Month, DATEDIFF(Month, 0, DATEADD(m, - 6, CURRENT_TIMESTAMP)), 0)

这为我提供了我启动此脚本的月份 + 上 6 个月的数据。所以例如如果我今天运行这个脚本,我将获得这个月的数据以及直到 4 月 (04) 为止的所有前几个月的数据。

现在我需要修改条件,如果我今天运行脚本,将只获取 03-09 月份的数据,不包括本月 (10) 的天数。

有什么建议吗?

最佳答案

如果不管今天是 1 号、3 号、9 号、29 号还是什么,你都想要前 6 个月,那么只需减去 7 个月。这是一种方法:将月份的第一天放入变量中,然后在查询中使用开放式范围。

DECLARE @ThisMonth DATETIME;
SET @ThisMonth = DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101');

SELECT...
WHERE CloseTime >= DATEADD(MONTH, -7, @ThisMonth)
AND CloseTime < @ThisMonth;

你也可以使用 0代替 '19000101'但我更喜欢明确的日期而不是隐含的速记(这是一个很难改掉的习惯)。

如果您真的不喜欢变量,那么您可以通过重复表达式来计算本月的第一天(并在范围的开头,从月数中减去 7)来使查询变得更加复杂:

SELECT...
WHERE CloseTime >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE())-7, '19000101')
AND CloseTime < DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101');

哎呀。变量使这一切变得更加整洁。

关于最近六个 "full"个月的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296873/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com