我的Ticket_Date
列格式为YYYY-MM-DD HH:MI:SS
我想检查Ticket_date
是否在当月。
到目前为止,我有:
Ticket_date >= '2015-04-01' and Ticket_date < '2015-04-30'
但是我需要它来处理当前月而不是硬编码
答案 0 :(得分:7)
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)
答案 1 :(得分:5)
MONTH(Ticket_date) = MONTH(GETDATE()) AND YEAR(Ticket_date) = YEAR(GETDATE())
答案 2 :(得分:3)
这个怎么样?
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可以在列上使用索引(如果适用)。
答案 3 :(得分:0)
(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'
?