用于筛选datetime变量大于或等于当前月份第一天的记录的T-SQL语法

用于筛选datetime变量大于或等于当前月份第一天的记录的T-SQL语法,sql,sql-server,tsql,datetime,sql-server-2014,Sql,Sql Server,Tsql,Datetime,Sql Server 2014,我正在使用SQL Server 2014,我需要在SQL查询中添加一行代码,该行代码将过滤仅提取到StayDate(数据库中的一列)大于或等于当月第一天的记录中的数据 换句话说,我需要的代码行如下所示: WHERE StayDate >= '1st Day of Current Month' 注:StayDate采用datetime格式(例如:2015-12-18 00:00:00.000)用于获取当月的第一天 WHERE StayDate >= Dateadd(dd, 1, E

我正在使用SQL Server 2014,我需要在SQL查询中添加一行代码,该行代码将过滤仅提取到
StayDate
(数据库中的一列)大于或等于
当月第一天的记录中的数据

换句话说,我需要的代码行如下所示:

WHERE StayDate >= '1st Day of Current Month'
注:
StayDate
采用
datetime
格式(例如:2015-12-18 00:00:00.000)

用于获取当月的第一天

WHERE  StayDate >= Dateadd(dd, 1, Eomonth(Getdate(), -1)) 

您可以尝试以下方法:

declare @t datetime = '2016-02-28'
select DATEADD(D, -DATEPART(d, @t) + 1, @t)
因此,在你的情况下:

WHERE StayDate >= DATEADD(D, -DATEPART(d, GETDATE()) + 1, GETDATE())

SQL Server 2012及以上版本

WHERE StayDate >= DATEADD(DAY, 1, EOMONTH(GETDATE(), -1))
SQL Server 2012之前

WHERE StayDate >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)

另一种选择;由于
staydate
在当月第一天当天或之后(大于或等于)相当于在当月搜索
staydate
s:

where datepart(mm, staydate) = datepart(mm, getdate())
  and datepart(yyyy, staydate) = datepart(yyyy, getdate())

我尝试了DATEDIFF函数,但无法使其正常工作。请不要重复填写答案。最初,您只是进行了第二个查询
where datepart(mm, staydate) = datepart(mm, getdate())
  and datepart(yyyy, staydate) = datepart(yyyy, getdate())