40

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

where datetime_column > DATEADD(m, -6, current_timestamp)

但是,如果我想从该月的第一天开始返回最近一个月,如何扩展此选项?例如,我在月中运行此条件(14/6/2000),最新行设置为14/1/2000,但我想将其返回为1/1/2000。有什么建议吗?

我尝试了一些子查询(日期时间的最大函数,包括月份函数),但没有成功。

4

5 回答 5

72

对于 MS SQL Server,您可以使用:

where datetime_column >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6,
current_timestamp)), 0)
于 2013-10-07T15:08:58.350 回答
13

在 SQL Server 中

where datetime_column > dateadd(m, -6, getdate() - datepart(d, getdate()) + 1)

SQLFiddle 演示

在 MySQL 中

where datetime_column > curdate() - interval (dayofmonth(curdate()) - 1) day - interval 6 month

SQLFiddle 演示

于 2013-10-07T14:56:54.573 回答
8

试试这个

where datediff(month, datetime_column, getdate()) <= 6

排除或过滤出未来的日期

where datediff(month, datetime_column, getdate()) between 0 and 6


这部分datediff(month, datetime_column, getdate())将获取当前日期和 Datetime_Column 数量的月差,并将返回 Rows,如:

结果
1
2
3
4
5
6
7
8
9
10

这是我们获得最近 6 个月数据的最后条件

结果 <= 6

于 2015-10-06T15:56:09.007 回答
2

.... where yourdate_column > DATE_SUB(now(), INTERVAL 6 MONTH)

于 2013-10-07T14:58:41.457 回答
0
select *
from tbl1
where
datetime_column >= 
DATEADD(m, -6, convert(date, convert(varchar(6), getdate(),112) + '01'))
于 2013-10-07T15:21:29.780 回答