【问题标题】:How to see if date is in current month SQL Server?如何查看日期是否在当月 SQL Server?
【发布时间】:2015-07-06 02:03:06
【问题描述】:

我有一个Ticket_Date 列,格式为YYYY-MM-DD HH:MI:SS

我想检查Ticket_date 是否在当月。

到目前为止我有:

 Ticket_date >= '2015-04-01' and Ticket_date < '2015-04-30'

但我需要它来处理当前月份而不是硬编码

【问题讨论】:

    标签: sql sql-server date


    【解决方案1】:

    怎么样(Server 2008 R2+)

    -- first day of current month
    Ticket_date  >= DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0)
    -- last day of current month 
    and Ticket_date <= DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)) 
    

    这里有更多示例 How can I select the first day of a month in SQL?

    • 为什么在Ticket_date &lt; '2015-04-30' 中省略=

    【讨论】:

      【解决方案2】:

      这个怎么样?

      where ticket_date >= cast(getdate() - day(getdate) + 1 as date) and
            ticket_date < dateadd(month, 1, cast(getdate() - day(getdate) + 1 as date) )
      

      此公式在ticket_date 上没有函数,因此 SQL Server 可以在适当的情况下使用列上的索引。

      【讨论】:

      • 当我在2019-01-22 中触发它时,它会生成条件&gt;= '2019-01-01' and &lt; '2019-02-01',它还会返回一月份的记录,而不仅仅是当前月份的二月份。但是您对索引的使用有好处。
      • @Muflix 。 . .问题是:“我想检查 Ticket_date 是否在当月。”此查询是实现该结果的最有效方式。
      • 你是对的。它不会返回二月,这是我的错误。
      【解决方案3】:
      MONTH(Ticket_date) = MONTH(GETDATE()) AND YEAR(Ticket_date) = YEAR(GETDATE())
      

      【讨论】:

        【解决方案4】:
         YEAR(Ticket_date) = YEAR(getdate()) and 
        MONTH(Ticket_date) = MONTH(getdate())
        

        但我也会将当前日期保存在变量中,以保证在午夜执行长查询时getdate() 的结果不会改变

        declare @today datetime = getdate()
        ...
         YEAR(Ticket_date) = YEAR(@today) and 
        MONTH(Ticket_date) = MONTH(@today)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多