SQL查询删除当前和将来的日期?

时间:2018-09-12 18:53:44

标签: sql-server

我想过滤掉所有具有未来日期的记录,以及当月的任何记录。我试图使用此查询:

...
WHERE (Month(DueDate) < Month(getdate()) AND (Year(DueDate) <= Year(getdate())))

问题在于,它不会返回上一年的任何结果,而是比当前月份大的一个月。即:今天的日期是18/12/9,它将不返回任何年份为10、11或12的记录,而与年份无关。

2 个答案:

答案 0 :(得分:1)

这将在当月的第一个月之后过滤掉所有带有DueDate的记录。

WHERE DueDate < DATEADD(MONTH ,DATEDIFF(MONTH, 0, GETDATE()), 0)

编辑:我有>。应该是<

答案 1 :(得分:0)

尝试类似的东西:

SELECT ...
FROM ...
WHERE DueDate < DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1);

此解决方案使用DATEFROMPARTS功能,您可以在documentation中查看更多信息。想法是获取当年的当前月份的第一天,并仅选择DueDate在给定日期和时间之前的那些行。

此外,如果您不希望使用GETDATE() (link)函数,请选择GETUTCDATE() (link)来代替它。