【问题标题】:How to retrieve records that are from two months from the current date如何检索距当前日期两个月的记录
【发布时间】:2021-03-02 23:16:36
【问题描述】:

所以我想要做的是当我运行查询时,我想返回当月两个月内的所有记录。例如,假设当前月份是 11 月,当查询运行时,我想返回 9 月的所有记录,并且只返回 9 月。如果我在 10 月运行查询,我想要 8 月的所有记录,并且只需要 8 月。我正在尝试在 MS SQL 中执行此操作。感谢您的建议。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 到目前为止你尝试过什么?为什么它不起作用?使用 >/>=</<= 运算符的 WHERE 有什么问题?
  • 欢迎使用 stackoverflow - 请查看 guidelines on how to ask questions - 这将帮助您获得有用的问题答案

标签: sql sql-server date


【解决方案1】:

函数GETDATE()可用于检索当前月份。

函数DATEADD(datepart,number,date) 可用于对日期执行操作。更多信息请看官方docs

因此,要检索当前月份 (-2) 前两个月的记录,您可以使用以下命令:

DATEADD(month, -2, GETDATE())

总结一个示例查询,用于选择当月两个月内的所有记录:

SELECT * FROM table 
   WHERE MONTH(month_column) = DATEADD(month, -2, GETDATE())

来源:

【讨论】:

  • 请对答案添加一点解释。
【解决方案2】:

您可以将月份部分放在变量中,然后可以在 Where 子句中使用它来过滤日期值的月份部分是否等于变量值。

查询

Declare @month as int;
Set @month=datepart(month, getdate()) - 2;

Select * from yourTableName
Where month(dateCol) = @month;

【讨论】:

    【解决方案3】:

    这可以在一个不错的 1 班轮中完成。

    WHERE NOW() BETWEEN Date1 和 Date2;

    【讨论】:

      【解决方案4】:

      在 SQL Server 中,您可以使用:

      where datecol >= dateadd(month, -3, datefromparts(year(getdate()), month(getdate()), 1)) and
            datecol < dateadd(month, -2, datefromparts(year(getdate()), month(getdate()), 1))
      

      这是索引和优化器友好的。如果不关心性能,可以使用datediff()

      where datediff(month, datecol, getdate()) = 2 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-23
        • 2019-08-07
        • 1970-01-01
        • 1970-01-01
        • 2016-02-25
        • 2016-03-13
        • 1970-01-01
        • 2012-02-04
        相关资源
        最近更新 更多