【发布时间】: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
我有一个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
怎么样(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 < '2015-04-30' 中省略=?【讨论】:
这个怎么样?
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 中触发它时,它会生成条件>= '2019-01-01' and < '2019-02-01',它还会返回一月份的记录,而不仅仅是当前月份的二月份。但是您对索引的使用有好处。
MONTH(Ticket_date) = MONTH(GETDATE()) AND YEAR(Ticket_date) = YEAR(GETDATE())
【讨论】:
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)
【讨论】: