用于过滤datetime变量大于或等于当前月的第1天的记录的T-SQL语法

时间:2016-05-02 05:05:02

标签: sql sql-server tsql datetime sql-server-2014

我正在使用SQL Server 2014,我需要在我的SQL查询中添加一行代码,这些代码会将提取的数据仅过滤到StayDate(数据库中的一列)为{{1}的记录中greater than or equal to

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

1st day of the current month

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

5 个答案:

答案 0 :(得分:3)

使用EOMONTH获取当月的第一天

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

答案 1 :(得分:2)

SQL Server 2012及更高版本

WHERE StayDate >= DATEADD(DAY, 1, EOMONTH(GETDATE(), -1))

在SQL Server 2012之前

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

答案 2 :(得分:1)

您可以尝试以下方法:

declare @t datetime = '2016-02-28'
select DATEADD(D, -DATEPART(d, @t) + 1, @t)

所以在你的情况下:

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

答案 3 :(得分:0)

StayDate >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101')

答案 4 :(得分:0)

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

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