如何在WHERE子句中使用日期范围

时间:2014-06-12 01:41:10

标签: sql sql-server

我想修改下面Where中的SQL Server Query子句,以便选择上个月的所有记录。

示例:如果我在2月20日运行查询,则应提取1月1日至1月31日的数据

我尝试使用以下内容,但正如您可能会注意到的那样,它会在执行之日起一个月内收集记录。

WHERE date_col >= cast(dateadd(Month, -1, getdate()) as date) and
      date_col <= cast(getdate() as date)

5 个答案:

答案 0 :(得分:2)

我并不是说这是最好的方式,但它应该有效:

SELECT * from YourTable
WHERE  DATEPART(Month, date_col) = (DATEPART(Month,GETDATE()) - 1)
AND    DATEPART(Year, date_col) = DATEPART(Year,DATEADD(Month, -1, GETDATE()))

答案 1 :(得分:2)

Sql Server 2012及更高版本

在这种情况下,EOMONTH看起来可能是一个有用的功能。 EOMONTH(getdate(), - 1)是上个月底。 EOMONTH(getdate(), - 2)是月末。

尝试类似

的内容
WHERE date_col >= cast(EOMONTH(getdate(), -1) as date) and date_col <=
cast(EOMONTH(getdate(),-2) as date);

答案 2 :(得分:1)

获取上个月的最后一天和第一天:

SELECT DATEADD(month, DATEDIFF(month, 0, DATEADD(MONTH,-1,GETDATE())), 0) AS First_Day_Of_Last_Month
       ,DATEADD(s,-1,DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE()),0))       AS Last_day_Of_Last_Month

结果:

╔═════════════════════════╦═════════════════════════╗
║ First_Day_Of_Last_Month ║ Last_day_Of_Last_Month  ║
╠═════════════════════════╬═════════════════════════╣
║ 2014-05-01 00:00:00.000 ║ 2014-05-31 23:59:59.000 ║
╚═════════════════════════╩═════════════════════════╝

您的查询

WHERE date_col >= DATEADD(month, DATEDIFF(month, 0, DATEADD(MONTH,-1,GETDATE())), 0)
  AND date_col <= DATEADD(s,-1,DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE()),0))

答案 3 :(得分:1)

由于您需要上个月的所有记录,因此您只需比较当前日期的月份和年份部分以及date_col值,如下所示:

select * 
from yourtable
where 
(month(date_col) = month(getdate()) - 1
and year(date_col) = year(getdate()) 
and month(getdate()) <> 1)
or
(month(date_col) = 12
 and year(date_col) = year(getdate()) - 1
 and month(getdate()) = 1)

答案 4 :(得分:1)

此查询也可以正常工作,并且答案也很好。

SELECT * 
FROM Member
WHERE DATEPART(m, date_created) = DATEPART(m, DATEADD(m, -1, getdate()))
AND DATEPART(yyyy, date_created) = DATEPART(yyyy, DATEADD(m, -1, getdate()))

Get the records of last month in SQL server